hive的调优
一、对执行语句进行调优
1.开启本地模式,对语句执行时间进行优化
set hive.exec.mode.local.auto=true;
2.测试fetch,对语句执行时间进行优化
①set hive.fetch.task.conversion=none;//都转为mr
②set hive.fetch.task.conversion=minimal;//直接获取数据,不
转为mr(但是filter会转化(where子句))
③set hive.fetch.task.conversion=more;//直接查,不走mr(是简单查询,没有函数,没有orderby)
3.执行计划
explain (extended|dependency|authorization) select * from hive_produce;
extended:显示抽象语法树,详细执行计划
dependency:要依赖的输入数据,分为两部分
authorization:这个语句用来表达当前用户对哪些inputs有读操作,对哪些outputs有写操作
4.设置map任务数量
任务数量主要决定因素:input文件总个数,input的文件大小,集群设置的文件块大小
//设置最大切面值为100个字节,观察map任务数
set mapreduce input.fileinputformat split maxsize=100;
5.设置reduce个数
①计算reduece个数
Ⅰ.每个Reduce处理的数据量默认是256MB
hive.exec.reducers.bytes.per.reducer=256000000
Ⅱ.每个任务最大的reduce数,默认是1009
hive.exec.reducers.max=1009
Ⅲ.计算reducer数的公式
N=min(参数2,总输入数据量/参数1)
②.调整reduce个数
在Hadoop的mapred-default.xml文件中修改,设置每个job的Reduce数量
set mapreduce.job.reduces=15;
③reduce个数并不是越多越好
有几个reduce就会有几个输入文件,过多的启动和初始化reduce会消耗时间和资源
6.join原则
尽量采用小表join大表
多个表关联时,最好分拆成小段,避免大sql(无法控制中间Job)
大表Join大表的时,主要要考虑空值情况。
7.小文件合并:
默认值 : HiveInputFormat,没有合并,只能文本操作
set hive.input.format
=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
8. jvm重用:
jvm重用: set mapred.job.reuse.jvm.num.tasks=400;
9. 开启 mapjoin
set hive.auto.convert.join = true;
10.空值处理
- 过滤掉空值( 先判断空值的占比 )
- 生成随机数

本文详细介绍了如何对Hive执行语句进行优化,包括开启本地模式、设置map和reduce任务数量、join原则等,并探讨了不同文件存储格式如textfile、sequencefile、rcfile、orcfile和parquet的特性及压缩方式,提供了实际测试数据以对比各种格式的性能表现。
最低0.47元/天 解锁文章
1890

被折叠的 条评论
为什么被折叠?



