hive 参数设置大全

合理设置参数,让集群飞起来~

 参数缺省值描述
可单独使用set hive.execution.engine=tez; 设置hive的计算引擎
可单独使用set mapreduce.map.memory.mb=4096; 设置每个map的内存
可单独使用set mapreduce.reduce.memory.mb=4096; 设置每个reduce的内存
可单独使用set mapreduce.map.java.opts=-Xmx13106M; 这个 Java 程序可以使用的最大堆内存数,一定要小于mapreduce.map.memory.mb
可单独使用mapreduce.reduce.java.opts 可以使用的最大堆内存数,一定要小于mapreduce.reduce.memory.mb
可单独使用set hive.cli.print.header=true; 辅助设置-打印表头
可单独使用set hive.cli.print.current.db=true; 辅助设置-显示当前数据库
可单独使用set hive.exec.parallel=true; 开启任务并行执行
可单独使用set hive.exec.parallel.thread.number=8; 同一个sql允许并行任务的最大线程数
联合使用set hive.exec.dynamic.partition=true;FALSE设置成true, 表示开启动态分区功能
set hive.exec.dynamic.partition.mode=nonstrict;strict设置成nonstrict, 表示允许所有分区都是动态的
set hive.exec.max.dynamic.partitions.pernode=1000;100每个mapper或reducer可以创建的最大动态分区个数.如果某个mapper或reducer尝试创建大于这个值的分区的话则会知出一个致命错误
set hive.exec.max.dynamic.partitions=1000;1000一个动态分区创建语句可以创建的虽大动态分区个数,如果超过这个佳则会抛出—个致命错误
hive.exec.max.created.files100000全局可以创建的最大文件个数.有一个Hadoop计数器会跟踪记录创速了多少个文件
可单独使用set mapred.reduce.tasks=100; 设置reduce数量, mapper数量:reduce数量 = 10:1
可单独使用set hive.exec.reducers.bytes.per.reducer=500000000; (500M) 设置每个reduce处理数据量,默认1G
联合使用set mapred.max.split.size=256000000; 每个Map最大输入大小,间接设置map个数,默认256M就比较好。
set mapred.min.split.size=100000000; 每个Map最小输入大小
set mapred.min.split.size.per.node=100000000; 一个节点上split的至少的大小
set mapred.min.split.size.per.rack=100000000; 一个交换机下split的至少的大小

set hive.input.format=

org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;

 执行Map前进行小文件合并,前面参数确定合并文件块的大小
可单独使用set hive.merge.mapfiles=true; 在Map-only的任务结束时合并小文件
可单独使用set hive.merge.mapredfiles = true; 在Map-Reduce的任务结束时合并小文件
可单独使用set mapreduce.job.reduce.slowstart.completedmaps=0.90.8reduce任务从map完成80%后开始执行
集群默认0.8,大部分比较小的job都是适合的,对于map比较重的大job,这个值可以适当调大,比如0.9
可单独使用set hive.exec.reducers.bytes.per.reducer=500000000;1000000000每个reduce处理的数据量,间接设置reduce的个数
可单独使用set hive.exec.reducers.max=999; 设置最大reduce的个数
可单独使用set mapred.reduce.tasks=10; 

直接设置reduce的个数,reduce个数并不是越多越好!Order by时只有一个reduce


如果你懒得看上文,推荐一套参数设置
set hive.execution.engine=tez;
set mapreduce.map.memory.mb=8192;
set mapreduce.reduce.memory.mb=8192;
set hive.exec.reducers.max=999;
set hive.exec.reducers.bytes.per.reducer=500000000;


开动态分区时设置
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
set hive.exec.max.dynamic.partitions.pernode=1000;
set hive.exec.max.dynamic.partitions=1000;
 

【小编废话】

在日常开发中,还需要结合集群的实际情况,任务的差异性,结合任务日志,针对性的调整参数,两个原则:

原则1:当资源紧张时,重要任务优先(需结合调度时间优化)。

原则2:在保证原则1的前提下,提升整个集群的效率。当时效要求高时,尽量压缩总体运行时间;当稳定性要求更高时,错峰执行,负载均衡。

 

参数调优核心总结为两个字:平衡。

1、时效和稳定性的平衡;

2、资源的平衡,在某一时间点,集群的内存、io、cpu等负载均衡。

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不吃西红柿丶

感谢鼓励,我必持续稳定输出!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值