2022-07-29 Hive压缩、文件存储格式、优化

前缀为hive的配置项都可以在hive-default.xml.template默认配置文件中找到,既可以在客户端中set进行临时配置,也可以在hive-site.xml中进行永久配置;

关于Hadoop的配置只能在Hive客户端中通过set临时配制,或者知己配置Hadoop的配置文件,达到永久配置生效的结果。

一、压缩、文件存储格式

1. 压缩

(1) 对底层Hadoop进行压缩配置

也可以直接在Hive客户端中临时配置

(2) 配置Hive

如果只是单单配置了Hadoop的配置文件,Hive在运行的时候是不生效的,Hive还掌控了压缩的一个总开关,只有该配置生效,才会真正的启用压缩功能。

配置项描述
hive.exec.compress.intermediate

用来指定Mapper阶段落盘的文件是否启用压缩;

true: 启用压缩

false: 禁用压缩

hive.exec.compress.output

用来指定MR输出后的文件是否启用压缩;

true: 启用压缩

false: 禁用压缩

2. 文件存储格式

在大数据领域,列式存储格式优于行式存储格式;

存储格式类型存储格式名称描述官网
TEXTFILE普通文本文件,建表时跟在STORED AS后面
ORC建表时跟在STORED AS后面,默认会启用压缩,如果自定义是否启用压缩或者使用哪种压缩算法,需要在TBLPROPERTIES中指定,指定方法查看文档Background (apache.org)
PARQUET建表时跟在STORED AS后面,默认会启用压缩,如果自定义是否启用压缩或者使用哪种压缩算法,需要在TBLPROPERTIES中指定,指定方法查看文档hive存储格式parquet_听见下雨的声音hb的博客-CSDN博客_hive parquet

二、优化

1. 查看SQL语句的执行计划

EXPLAIN [EXTENDED | DEPENDENCY | AUTHORIZATION] query;

-- 使用EXTENDED可以获得更加详细的执行计划

2. 当Hive进行抓取数据、过滤数据的时候,不启动MR

	<property>
		<!-- hive-site.xml中配置或者在客户端中直接set -->
		<name>hive.fetch.task.conversion</name>
		<value>more</value>
		<description>
		  Expects one of [none, minimal, more].
		  Some select queries can be converted to single FETCH task minimizing latency.
		  Currently the query should be single sourced not having any subquery and should not have any aggregations or distincts (which incurs RS), lateral views and joins.
		  0. none : 运行任何SQL语句都会启动MR
		  1. minimal : SELECT , 根据分区列名进行过滤, LIMIT 不启动MR
		  2. more  : SELECT, 过滤, LIMIT only (支持 TABLESAMPLE and 虚列) 不启动MR
		</description>
	</property>

3. HIve自动判断是否使用本地模式执行MR

配置位置配置项描述
hive-site.sml 或者 客户端sethive.exec.mode.local.auto

true: 表示允许自动判断并使用本地模式

false: 表示不允许自动判断并使用本地模式

默认关闭

hive-site.sml 或者 客户端sethive.exec.mode.local.auto.inputbytes.max

默认值为:134217728,即128M;

当输入的数据量大于该值时,不使用本地模式跑MR

hive-site.sml 或者 客户端sethive.exec.mode.local.auto.input.files.max

默认值为:4,表示输入的数据文件个数;

当输入的数据文件个数大于该值时,不使用本地模式跑MR

4. 使用小表作为主表;

5. 当表都很大的时候,采用如下手段:

(1) 连接之前,提前过滤不需要的记录;

(2) 如果需要所有记录,不能采用提前过滤的方法,那就对拥有相同key且数据量特别大的记录进行key转换(转换成其他值,解决数据倾斜问题);

(3) 使用分桶字段进行连接。

6. GROUP BY导致Reducer发生数据倾斜问题

配置位置配置项描述
hive-site.xml 或者 客户端中sethive.map.aggr

提前聚合,即Combiner;

true: 开启提前聚合

false: 禁用提前聚合

默认开启

hive-site.xml 或者 客户端中sethive.groupby.mapaggr.checkinterval

可以提前聚合的数据条数;

hive-site.xml 或者 客户端中sethive.groupby.skewindata

有数据倾斜的时候,是否进行负载均衡;

true: 开启负载均衡

false: 关闭负载均衡

默认为false

7. 去重SQL

-- 数据量少
SELECT COUNT(DISTINCT *) FROM table_name;

-- 数据量很大
SELECT COUNT(*) OVER() FROM table_name GROUP BY f;

8. 行列过滤,避免SELECT *,表连接之前过滤不需要的数据;

9. 使用分区、分桶来提升查询效率;

10. 根据实际情况设置Mapper以及Reducer数量

(1) 切片大小设置、FileInputForamt中的getSplits实现

(1) Hive读取到多个小文件时,提前进行合并

配置位置配置项描述
hive-site.xml 或者 客户端中sethive.input.format

Hive读取文件的类,默认值为:org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;

默认值可以合并并读取小文件

(2) 在Hive中配置运行完MR后,对输出的小文件进行合并

配置位置配置项描述
hive-site.xml 或者 客户端中sethive.merge.mapfiles

在只有Mapper阶段的MR任务执行完毕后,是否合并输出的小文件;

默认值为true,即合并

hive-site.xml 或者 客户端中sethive.merge.mapredfiles

在既有Mapper也有Reducer的MR任务执行完毕后,是否合并输出的小文件;

默认为false,即不合并;

true:合并

hive-site.xml 或者 客户端中sethive.merge.size.per.task

合并小文件后输出的文件大小为多大;

默认配置为256M,配置值得单位应为字节

hive-site.xml 或者 客户端中sethive.merge.smallfiles.avgsize输出的文件平均大小小于改配置值时,就进行文件合并

(3) 调整Reducer的个数

# 配制方法1:
# 并不是所有语句都会使用该方法计算reducer个数
# 指定Reducer能够处理的数据大小,默认配置为256M,配置值的单位应为字节
hive.exec.reducers.bytes.per.reducer
# 每个任务最大能启动的Reducer个数,默认为1009
hive.exec.reducers.max
# Reducer个数的计算公式
N=min(hive.exec.reducers.max,总输入数据量/hive.exec.reducers.bytes.per.reducer)



# 配制方法2:
# Hadoop配置文件(mapred-site.xml)中修改或者Hive客户端中set
mapreduce.job.reduces

11. 开启并行执行模式

配置位置配置项描述
hive-site.xml 或者 客户端中sethive.exec.parallel

是否开启并行模式

true: 开启

false: 不开启

hive-site.xml 或者 客户端中sethive.exec.parallel.thread.number一个sql语句执行允许做多多少个Stage并行执行,默认为8

12. 严格模式

配置位置配置项描述
hive-site.xml 或者 客户端中sethive.strict.checks.no.partition.filter

指定当在分区表查询数据时,是否强制要求使用分区字段进行过滤;

true: 强制

false: 不强制

hive-site.xml 或者 客户端中sethive.strict.checks.orderby.no.limit

指定使用全局排序时,是否强制要求加上LIMIT子句;

true: 强制

false: 不强制

hive-site.xml 或者 客户端中sethive.strict.checks.cartesian.product

是否允许编写笛卡尔积的SQL语句

true: 不允许

false: 允许

13. 采用压缩

14. 其他配置

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值