摸鱼大数据——Hive调优1-3

hive官方配置url: Configuration Properties - Apache Hive - Apache Software Foundation

1、调优方式

hive参数配置的意义: 开发Hive应用/调优时,不可避免地需要设定Hive的参数。设定Hive的参数可以调优HQL代码的执行效率,或帮助定位问题。然而实践中经常遇到的一个问题是,为什么我设定的参数没有起作用?这是对hive参数配置几种方式不了解导致的!
​
hive参数设置范围(从大到小): 配置文件 > 命令行参数 > set参数声明
hive参数设置优先级(从高优先级到低优先级): set参数声明 > 命令行参数 > 配置文件
​
注意: 在工作中,推荐使用set参数声明,因为最简单最方便。而且同一个大数据集群除了你了还有其他的人或者项目组在使用。

2、hive数据压缩

Hive底层是运行MapReduce,所以Hive支持什么压缩格式本质上取决于MapReduce。

2.1 压缩对比

在后续可能会使用GZ(GZIP), 保证压缩后的数据更小, 同时压缩和解压的速度比较OK的,

但是大部分的选择主要会选择另一种压缩方案, snappy, 此种方案可以保证在合理的压缩比下, 拥有更高的解压缩的速度,在大数据领域中主要是关注数据的处理速度

snappy | A fast compressor/decompressor On a single core of a Core i7 processor in 64-bit mode, Snappy compresses at about 250 MB/sec or more and decompresses at about 500 MB/sec or more.

2.2 开启压缩

开启map输出阶段压缩可以减少job中map和Reduce task间数据传输量. 当Hive将输出写入到表中时,输出内容同样可以进行压缩。用户可以通过在查询语句或执行脚本中设置这个值为true,来开启输出结果压缩功能。

-- 创建数据库
create database hive05;
-- 使用库
use hive05;
​
​
-- 开启压缩(map阶段或者reduce阶段)
--开启hive支持中间结果的压缩方案
set hive.exec.compress.intermediate; -- 查看默认
set hive.exec.compress.intermediate=true ;
--开启hive支持最终结果压缩
set hive.exec.compress.output; -- 查看默认
set hive.exec.compress.output=true;
​
--开启MR的map端压缩操作
set mapreduce.map.output.compress; -- 查看默认
set mapreduce.map.output.compress=true;
--设置mapper端压缩的方案
set mapreduce.map.output.compress.codec; -- 查看默认
set mapreduce.map.output.compress.codec= org.apache.hadoop.io.compress.SnappyCodec;
​
-- 开启MR的reduce端的压缩方案
set mapreduce.output.fileoutputformat.compress; -- 查看默认
set mapreduce.output.fileoutputformat.compress=true;
-- 设置reduce端压缩的方案
set mapreduce.output.fileoutputformat.compress.codec; -- 查看默认
set mapreduce.output.fileoutputformat.compress.codec = org.apache.hadoop.io.compress.SnappyCodec;
--设置reduce的压缩类型
set mapreduce.output.fileoutputformat.compress.type; -- 查看默认
set mapreduce.output.fileoutputformat.compress.type=BLOCK;

3、hive数据存储

3.1 行列存储原理

行存储的特点: 将数据以行的形式整体进行存放
列存储的特点: 将相同字段的值作为整体放在一起进行存放

行存储:
    优点: 如果要查询整行数据内容,速度比较快。适合进行数据的insert/update操作
    缺点: 如果数据分析的时候,只想针对某几个字段进行处理,那么这个效率低。因为会将不需要的字段内容也会加载出来
    使用: textfile和sequencefile
    
列存储: 
    优点: 如果数据分析的时候,只想针对某几个字段进行处理,那么效率高,因为你要什么,我就给你返回什么
    缺点: 如果要查询整行数据内容,速度比较慢。不适合进行数据的insert/update操作
    使用: orc和parquet。推荐使用orc
    
注意: 在工作中推荐ORC+Snappy压缩一起使用,更加能够减少HDFS的磁盘占用。
格式:
    stored as orc -- 设置数据的存储格式
    tblproperties ("orc.compress"="SNAPPY"); -- 设置数据的压缩格式

ORC原理图

3.2 存储压缩比
-- 数据的存储和压缩方式
-- textfile:占用空间18.13 MB(如果是HDFS需要乘以3)
create table log_text(track_time string,url string,session_id string,referer string,ip string,end_user_id string,city_id string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
stored as textfile; -- 表默认的存储格式就是不压缩并且使用行式存储中的textfile存储
​
-- 导入数据
load data inpath '/dir/log.data' into table log_text;
​
-- 数据验证
select * from log_text;
select count(*) as cnt from log_text;
​
-- 列式存储:ORC,占用空间2.78 MB
create table log_orc(track_time string,url string,session_id string,referer string,ip string,end_user_id string,city_id string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
stored as orc;
​
-- 加载数据
insert overwrite table log_orc select * from log_text;
select count(*) as cnt from log_orc;
​
-- 列式存储:ORC+snappy。占用空间3.75 MB,这里相对ORC反而多占用了1MB空间,是因为数据量太小,同时压缩以后,压缩文件里面需要存储和压缩相关元数据信息(例如:使用的压缩算法具体是哪一个)
-- https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL
create table log_orc_snappy(track_time string,url string,session_id string,referer string,ip string,end_user_id string,city_id string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
stored as orc -- 设置数据的存储格式
tblproperties ("orc.compress"="SNAPPY"); -- 设置数据的压缩格式
​
-- 加载数据
insert overwrite table log_orc_snappy select * from log_text;
select count(*) as cnt from log_orc_snappy;
​
-- 列式存储:parquet。占用空间13.09MB
create table log_orc_parquet(track_time string,url string,session_id string,referer string,ip string,end_user_id string,city_id string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
stored as parquet;
​
-- 加载数据
insert overwrite table log_orc_parquet select * from log_text;
select count(*) as cnt from log_orc_parquet;

拓展dfs -du -h

-- 查看hdfs文件大小除了去页面查看,还可以通过命令
dfs -du -h '/user/hive/warehouse/hive05.db/log_text/log.data' ;
dfs -du -h '/user/hive/warehouse/hive05.db/log_orc/000000_0' ;
dfs -du -h '/user/hive/warehouse/hive05.db/log_orc_snappy/000000_0' ;
dfs -du -h '/user/hive/warehouse/hive05.db/log_parquet/000000_0' ;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/21301.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker 安装部署(CentOS 8)

以下所有操作都是基于 CentOS 8 系统进行操作的。安装的 Docker 版本为 25.0.5-1.el8。 1、卸载老版本 Docker sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine注&a…

mmdet3D中文注释

# 版权声明: 本代码版权所有 (c) OpenMMLab。 import os from collections import OrderedDict from os import path as osp from typing import List, Tuple, Unionimport mmcv import numpy as np from nuscenes.nuscenes import NuScenes from nuscenes.utils.geometry_util…

基于学习的决策树

基于学习的决策树概述 决策树是一种监督学习方法,广泛应用于分类和回归任务中。基于学习的决策树模型通过学习数据中的特征来构建树状结构,帮助做出决策。以下是对基于学习的决策树的详细介绍,包括其基本概念、工作流程、构建算法、优势和挑…

利用人工智能实现量子计算

转载自:利用人工智能实现量子计算 2024年 5月 12日 By Mark Wolf https://developer.nvidia.com/zh-cn/blog/enabling-quantum-computing-with-ai/ 文章目录 一、概述二、改进量子处理器三、校正噪声量子位的误差四、开发高效的量子算法五、探索量子计算的人工智能 …

编写一个问卷界面 并用JavaScript来验证表单内容

倘若文章和代码中有任何错误或疑惑&#xff0c;欢迎提出交流哦~ 简单的html和css初始化 今天使用JavaScript来实现对表单输入的验证&#xff0c; 首先写出html代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset&qu…

国产算力——摩尔线程算力芯片MTT S80、MTT S3000

摩尔线程算力芯片是摩尔线程智能科技&#xff08;北京&#xff09;有限责任公司&#xff08;简称&#xff1a;摩尔线程&#xff09;的主要产品&#xff0c;该公司专注于GPU芯片的设计和相关产品的研发。以下是关于摩尔线程算力芯片的一些关键信息&#xff1a; 产品概述&#x…

Halcon 双相机标定与拼图(一)

二、算子解释 get_calib_data camera-pose 获得基于第一个相机的第二个相机的Pose get_calib_data (CalibDataID, camera, 1, pose, RelPose2) *relative 相对 * To get the absolute pose of the second camera, its relative pose needs * to be inverted and combined…

C/C++文件读写

一.c语言实现 常用函数介绍 C语言中文件读写操作主要通过stdio.h中的文件操作函数来实现。常用的文件操作函数有fopen、fclose、fread、fwrite、fseek、ftell等。 1.fopen函数&#xff1a;用于打开一个文件&#xff0c;并返回一个指向该文件的指针。函数原型如下&#xff1a; …

[docker] docker-compose-redis.yml

docker-compose-redis.yml version: 3services:redis:image: redis:6.2.7container_name: redisports:- "6379:6379"environment:# 时区上海TZ: Asia/Shanghaivolumes:# 配置文件- /docker/redis/conf:/redis/config# 数据文件- /docker/redis/data/:/redis/data/co…

java递归计算文件夹和文件大小

背景 背景发现电脑c盘占用过高,然而我却不清楚是哪些文件占用了磁盘空间,于是我希望用程序来帮我完成这件事。小插曲:开始的时候,我使用python来做的,结果发现效率实在是太低,最后用java重写了一波。有需要的同学可以拿去修改一些。 代码 import java.io.File; import ja…

监控易监测对象及指标之:全面监控达梦数据库6

随着企业业务的不断发展&#xff0c;数据库作为信息存储和管理的核心&#xff0c;其稳定性和安全性成为了企业运营的关键。达梦数据库6作为国产数据库的代表之一&#xff0c;在各类业务场景中发挥着重要作用。 为了确保达梦数据库6的稳定运行和数据安全&#xff0c;对其进行全面…

QT 音乐播放器【二】 歌词同步+滚动+特效

文章目录 效果图概述代码解析歌词歌词同步歌词特效 总结 效果图 概述 先整体说明一下这个效果的实现&#xff0c;你所看到的歌词都是QGraphicsObject&#xff0c;在QGraphicsView上绘制(paint)出来的。也就是说每一句歌词都是一个图元(item)。 为什么用QGraphicsView框架&…

1121 祖传好运

solution 好运数&#xff1a;去除任意位末尾数位 所得到的数都满足能够被当前数位整除 #include<iostream> #include<string> using namespace std; int main(){int k, flag;string s;cin >> k;while(k--){flag 1;cin >> s;for(int i 1; i < s.…

【Linux】进程(3):运行,阻塞,挂起

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家了解Linux进程&#xff08;3&#xff09;&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 &#xff08;A&#xff09; 运行&#xff08;R&#xff09;进程切…

在gitlab上发布npm二进制文件

❝ 允许奇迹发生 ❞ 大家好&#xff0c;我是「柒八九」。一个「专注于前端开发技术/Rust及AI应用知识分享」的Coder。 前言 还记得之前我们讲过如何在 npm 上发布二进制文件&#xff1f;吗。我们通过npm将我们之前在Rust 赋能前端-开发一款属于你的前端脚手架中生成Rust二进制文…

生物制药企业选择谷歌云的理由有哪些?

AI发展的这一年&#xff0c;科学家也紧随其后&#xff0c;透过AI拓展更多微观层面的生物学奥义&#xff0c;包括蛋白质折叠等。生物制药公司也加大了在药物研发领域的投入&#xff0c;其中一方面就是搭载云平台。那么&#xff0c;生物制药公司选择谷歌云的原因有哪些呢&#xf…

Python | Leetcode Python题解之第128题最长连续序列

题目&#xff1a; 题解&#xff1a; class Solution:def longestConsecutive(self, nums: List[int]) -> int:longest_streak 0num_set set(nums)for num in num_set:if num - 1 not in num_set:current_num numcurrent_streak 1while current_num 1 in num_set:curre…

【杂记-TCP协议三次握手、四次挥手始末详解】

一、三次握手前&#xff1a; 使用TCP协议的原因 TCP协议的目的是为了保证数据能在两端准确、连续的传输。 传输中使用Socket数据结构 TCP协议可使一个设备能同时与多个设备交互信息&#xff0c;它必须要保证不同传输通道之间不会产生串联或相互影响&#xff0c;所以TCP使用Soc…

Flutter基础 -- Dart 语言 -- 进阶使用

目录 1. 泛型 generics 1.1 泛型使用 1.2 泛型函数 1.3 构造函数泛型 1.4 泛型限制 2. 异步 async 2.1 异步回调 then 2.2 异步等待 await 2.3 异步返回值 3. 生成器 generate &#xff08;了解&#xff09; 3.1 同步生成器 sync* 使用 sync* 的场景 总结 3.2 异…

【C语言】编译与链接:深入理解程序构建过程

&#x1f525;引言 本篇将深入理解程序构建过程&#xff0c;以便于我们在编写程序的过程同时&#xff0c;理解底层是如何从程序的创建到生成可执行程序的。 &#x1f308;个人主页&#xff1a;是店小二呀 &#x1f308;C语言笔记专栏&#xff1a;C语言笔记 &#x1f308;C笔记专…