hive 参数设置大全

举报
不吃西红柿 发表于 2021/07/15 01:09:02 2021/07/15
【摘要】 合理设置参数,让集群飞起来~  参数缺省值描述可单独使用set hive.execution.engine=tez; 设置hive的计算引擎可单独使用set mapreduce.map.memory.mb=4096; 设置每个map的内存可单独使用set mapreduce.reduce.memory.mb=4096; 设置每个reduce的内存可单独使用set mapre...

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

  参数 缺省值 描述
可单独使用 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.files 100000 全局可以创建的最大文件个数.有一个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.9 0.8 reduce任务从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等负载均衡。

文章来源: notomato.blog.csdn.net,作者:kissme丶,版权归原作者所有,如需转载,请联系作者。

原文链接:notomato.blog.csdn.net/article/details/111912916

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。