Hive配置汇总(一)

主要功能hive配置参数作用默认值应用场景
并发hive.exec.parallel=true;多job并发  
 hive.exec.parallel.thread.numbe=X;可以并行化的job数8 
输入合并小文件hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;执行Map前进行小文件合并。一个data node节点上多个小文件会进行合并,合并文件数由mapred.max.split.size限制的大小决定。  
 hive.hadoop.supports.splittable.combineinputformat = true;是否支持可切分的 CombieInputFormatFALSE 
小文件mapreduce.job.split.metainfo.maxsize=-1  java.io.IOException:Split metadata size exceeded 10000000,小文件过多
 mapreduce.jobtracker.split.metainfo.maxsize = -1   
 mapreduce.job.running.map.limit=50000;  map数超过50000的job设置:
map数mapred.min.split.size = X;每个Map最小输入大小  
 mapred.max.split.size=X;每个Map最大输入大小  
 mapred.min.split.size.per.node=100000000;一个节点上(datanode)split至少的大小,  
 mapred.min.split.size.per.rack=100000000;同一个交换机(rack locality)下split至少的大小  
 mapreduce.input.fileinputformat.split.maxsize = 256000000;mapred代表的是hadoop旧API,而mapreduce代表的是hadoop新的API。  
 mapreduce.input.fileinputformat.split.minsize.per.node=256000000;   
 mapreduce.input.fileinputformat.split.minsize.per.rack=256000000;   
reduce数hive.exec.reducers.bytes.per.reducer = X;每个reducer处理的文件大小,默认是1GB,调整reduce数目100000000生成的文件大小,设置每个reducer处理的数据hive.exec.reducers.bytes.per.reducer=5120000000; insert into table xxx select * from xxx distribute by rand();备注: 设置的参数是生成的文件大小,distribute by rand()保证数据的平均大小是512Mb。
 hive.exec.reducers.max控制最大的reducer的数量, 如果 input / bytes per reduce >max 则会启动这个参数所指定的reduce个数。 这个并不会影响mapre.reduce.tasks参数的设置。默认的max是999999 
 hive.mapred.reduce.tasks这个参数如果指定了,hive就不会用它的estimation函数来自动计算reduce的个数,而是用这个参数来启动reducer。默认是-1(reduce的个数设置其实对执行效率有很大的影响:1)、如果reduce太少: 如果数据量很大,会导致这个reduce异常的慢,从而导致这个任务不能结束,也有可能会OOM 2)、如果reduce太多: 产生的小文件太多,合并起来代价太高,namenode的内存占用也会增大。如果我们不指定mapred.reduce.tasks,hive会自动计算需要多少个reducer。计算的公式: reduce个数 = InputFileSize / bytes per reducer 3)、估算reducer的个数,及计算公式:注意最重要的一句话:int reducers = (int)((totalInputFileSize +bytesPerReducer - 1) / bytesPerReducer)) 生成的文件个数。设置reduce个数 mapred.reduce.tasks=50; insert into table xxx select * from xxx distribute by rand();备注: 设置的参数是生成的文件个数,distribute by rand()保证数据随机分配到50个文件中。
输出合并小文件hive.merge.mapredfiles = true正常的map-reduce job后,是否启动merge job来合并reduce端输出的结果,建议开启  
 hive.merge.mapfiles = true;正常的map-only job后,是否启动merge job来合并map端输出的结果  
 hive.merge.size.per.task = X;合并后文件的大小  
 hive.merge.smallfiles.avgsize=X;当输出文件平均大小小于该值,启动新job合并文件-1 
输出压缩mapred.output.compress=true;压缩输出  
 hive.exec.compress.output=true;为最终输出结果启用压缩  
 mapred.output.compression.codec=com.hadoop.compression.lzo.LzopCodec;输出所用的压缩codec 常见的压缩格式:DEFLATE org.apache.hadoop.io.compress.DefaultCodec gzip org.apache.hadoop.io.compress.GzipCodec bzip org.apache.hadoop.io.compress.BZip2Codec Snappy org.apache.hadoop.io.compress.SnappyCodecorg.apache.hadoop.io.compress.DefaultCodec 
 mapred.output.compression.type=BLOCK;控制限制使用压缩格式,默认值为RECORD, 即对每一条记录进行压缩, 如果将其改为BLOCK,将针对一组记录进行压缩SqeuenceFile的输出可以使用的压缩类型:NONE,RECORD,BLOCKRECORD 
中间过程压缩hive.exec.compress.intermediate=true;为map中间输出启用压缩。  
 mapred.map.output.compression.codec=com.hadoop.compression.lzo.LzoCodec;一般对于中间输出压缩采用低压缩比,高压缩解压缩速度的压缩算法,如LZO,Snappyorg.apache.hadoop.io.compress.DefaultCodec 
 hive.intermediate.compression.type=BLOCK; RECORD 
动态分区hive.exec.max.created.files=100000;动态分区属性,全局可以创建的最大文件个数100000 
 hive.exec.dynamic.partition.mode = nonstrict;动态分区的模式,默认strict,表示必须指定至少一个分区为静态分区,nonstrict模式表示允许所有的分区字段都可以使用动态分区。一般需要设置为nonstrictstrict 
 hive.exec.dynamic.partition = true;是否开启动态分区功能,默认false关闭。使用动态分区时候,该参数必须设置成true;FALSE 
 hive.exec.max.dynamic.partitions.pernode在每个执行MR的节点上,最大可以创建多少个动态分区。该参数需要根据实际的数据来设定。比如:源数据中包含了一年的数据,即day字段有365个值,那么该参数就需要设置成大于365,如果使用默认值100,则会报错。100 
 hive.exec.max.dynamic.partitions在所有执行MR的节点上,最大一共可以创建多少个动态分区。  
 hive.error.on.empty.partition当有空分区生成时,是否抛出异常。一般不需要设置。FALSE 
groupby负载均衡hive.groupby.skewindata=true;负载均衡(一般不建议使用,会有丢数据的风险)数据倾斜时负载均衡,当选项设定为true,生成的查询计划会有两个MRJob。第一个MRJob 中,Map的输出结果集合会随机分布到Reduce中,每个Reduce做部分聚合操作,并输出结果,这样处理的结果是相同的GroupBy Key有可能被分发到不同的Reduce中,从而达到负载均衡的目的;第二个MRJob再根据预处理的数据结果按照GroupBy Key分布到Reduce中(这个过程可以保证相同的GroupBy Key被分布到同一个Reduce中),最后完成最终的聚合操作。  
 hive.groupby.mapaggr.checkinterval=100000;group的键对应的记录条数超过这个值则会进行分拆,值根据具体数据量设置  
查看hive.stats.dbclass=counter;存储临时Hive统计信息的方式  
 dfs.block.size;查看集群设置的文件块大小,不能修改,值为134217728,即128mb。  
 io.compression.codecs;查看集群的支持的压缩算法.org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.BZip2Codec,com.hadoop.compression.lzo.LzoCodec,com.hadoop.compression.lzo.LzopCodec,org.apache.hadoop.io.compress.SnappyCodec  
数据倾斜优化hive.auto.convert.join=true/+mAPJOIN(小表名)/ 小表加载到内存中,表的JOIN操作是在Map端且在内存进行的FALSE大表 join 小表
 hive.optimize.skewjoin=truejoin过程出现倾斜则优化  
 hive.skewjoin.key=1000000join的键对应的记录条数超过这个值则会进行优化  
作业mapreduce.job.name作业名称  
 mapreduce.job.priority作业优先级,VERY_HIGH,HIGH,NORMAL,LOW,VERY_LOWNORMAL 
MR ApplicationMaster设置yarn.app.mapreduce.am.resource.mbMR ApplicationMaster占用的内存量1536 
 yarn.app.mapreduce.am.resource.cpu-vcoresMR ApplicationMaster占用的虚拟CPU个数1 
 mapreduce.am.max-attemptsMR ApplicationMaster最大失败尝试次数2 
Map Taskmapreduce.map.memory.mb每个Map Task需要的内存量1024MAP YARN 申请内存 4096
 mapreduce.map.cpu.vcores每个Map Task需要的虚拟CPU个数1 
 mapreduce.map.maxattemptsMap Task最大失败尝试次数4 
Reduce Taskmapreduce.reduce.memory.mb每个Reduce Task需要的内存量1024REDUCE YARN 申请内存
 mapreduce.reduce.cpu.vcores每个Reduce Task需要的虚拟CPU个数1 
 mapreduce.reduce.maxattemptsReduce Task最大失败尝试次数4 
 mapreduce.map.speculative是否对Map Task启用推测执行机制FALSE 
 mapreduce.reduce.speculative是否对Reduce Task启用推测执行机制FALSE 
 mapreduce.map.sort.spill.percentMap阶段溢写文件的阈值(排序缓冲区大小的百分比)0.8 
 mapreduce.reduce.shuffle.parallelcopiesReduce Task启动的并发拷贝数据的线程数目5 
队列mapreduce.job.queuename作业提交到的队列default 
iomapreduce.task.io.sort.mb任务内部排序缓冲区大小100 
 io.sort.mb = X;map输出缓冲区大小100 
 io.sort.factor = X;map端或reduce端排序文件时,每次对多合并流数,默认值为1010 
yarnyarn.app.mapreduce.am.command-opts=-Xmx8192m  beyond virtual memory limits
 yarn.app.mapreduce.am.resource.mb=9216   
JVMmapreduce.map.java.opts=-Xmx3572M;一般 JVM 参数可以是 Yarn 申请内存的 80%, 如果 都比较大,可以酌情 MAP JVM 内存
 mapreduce.reduce.java.opts=-Xmx4096M;  REDUCE JVM 内存
 yarn.app.mapreduce.am.resource.mb=2000;  AM YARN 申请内存
 yarn.app.mapreduce.am.command-opts=-Xmx1524m;  AM JVM 内存
矢量查询(Vectorized query)hive.vectorized.execution.enabled = true;每次处理数据时会将1024行数据组成一个batch进行处理,而不是一行一行进行处理,这样能够显著提高执行速度。  
 hive.vectorized.execution.reduce.enabled = true;   
TEZhive.execution.engine=tez;Tez 是一个开源的支持DAG作业的计算框架,它来源于MapReduce框架。  
 set hive.mapjoin.hybridgrace.hashtable=falseHive2.1.0的版本有一个BUG。使用Tez的时候需要设置  
COST BASED QUERY OPTIMIZATIONset hive.cbo.enable=true;COST BASED QUERY OPTIMIZATION可以优化hive的每次查询。如果我们想要使用CBO,需要通过HIVE的分析模式来收集表的不同统计数据,我们可以通过下面的命令来进行:analyze table tweets compute statistics for columns;  
 set hive.compute.query.using.stats=true;   
 set hive.stats.fetch.column.stats=true;   
 set hive.stats.fetch.partition.stats=true;   

资料:
https://zh.hortonworks.com/blog/5-ways-make-hive-queries-run-faster/
Hive官网:https://cwiki.apache.org/confluence/display/Hive/AdminManual+Configuration
Hadoop官网:http://hadoop.apache.org/docs/current/
set -v; 查看hive的所有默认配置。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值