hive 参数设置大全

2022-07-29 10:08:06 浏览数 (1)

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

参数

缺省值

描述

可单独使用

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等负载均衡。

0 人点赞