记录常用的HIVE set参数

发布时间:2026/8/2 12:04:28
记录常用的HIVE set参数 引擎为MR--打开动态分区后允许所有分区都是动态分区模式sethive.exec.dynamic.partition.modenonstrict;-- 是否启动动态分区sethive.exec.dynamic.partitiontrue;--小文件合并参数--设置map端输出进行合并默认为true--文件数目小容易在文件存储端造成瓶颈给HDFS带来压力影响处理效率。对此可以通过合并Map和Reduce的结果文件来消除这样的影响。sethive.merge.mapfilestrue;--设置reduce端输出进行合并默认为falsesethive.merge.mapredfilestrue;-- 开启并行执行MapReduce阶段、抽样阶段、合并阶段、limit阶段等并行执行sethive.exec.paralleltrue;--关闭并发防止锁表sethive.support.concurrencyfalse;--是否在map端进行聚合默认是true。防止数据倾斜hive.map.aggrtrue;--调整mapper和reducer的个数--减少map数:下面三个参数确定合并文件块的大小大于文件块大小128m的按照128m来分隔小于128m,大于100m的按照100m来分隔--把那些小于100m的包括小文件和分隔大文件剩下的进行合并setmapred.max.split.size100000000;setmapred.min.split.size.per.node100000000;setmapred.min.split.size.per.rack100000000;sethive.input.formatorg.apache.hadoop.hive.ql.io.CombineHiveInputFormat;-- 执行前进行小文件合并--增加map数当input的文件都很大 任务逻辑复杂map执行非常慢的时候--可以考虑增加Map数来使得每个map处理的数据量减少从而提高任务的执行效率setmapred.reduce.tasks10;--增加reducer数setmapred.reduce.tasks/mapreduce.job.reduces?;--每个reduce任务处理的数据量.默认1gsethive.exec.reducers.bytes.per.reducer1000000000;--1g--每个任务最大的reduce数默认为999sethive.exec.reducers.max?;--每个任务最大的reduce数默认为1009。setHive.exec.reducers.max1009;--调整reduce个数方法一sethive.exec.reducers.bytes.per.reducer500000000;--500M--调整reduce个数方法二setmapreduce.job.reduces15;--设置每个job的renduce个数--严格模式默认关闭禁止三种类型的查询分区表不指定分区查询、笛卡尔积、使用order bySetmapred.modestrict;--jvm重用:使用派生jvm来执行map和reduce任务setmapred.job.jvm.numtasks1;--Joinon中有小表则可以在map-side join执行过程中将缓存到内存中的小表逐一匹配从而可以省略所需要的reduce过程。Map Join优化, 不太大的表直接通过map过程做joinsethive.auto.convert.jointrue;sethive.auto.convert.join.noconditionaltasktrue;sethive.exec.mode.local.autofalse;sethive.auto.convert.joinfalse;sethive.auto.convert.join.noconditionaltaskfalse;sethive.mapjoin.optimized.hashtablefalse;sethive.optimize.bucketmapjoinfalse;引擎为sparksethive.execution.enginespark;--小文件是HDFS的天敌所以Hive原生提供了合并小文件的选项合并小文件sethive.merge.sparkfilestrue--hive on Spark下则改用在内存中存储的近似大小.所以由MR迁移到Spark时要适当调高这个参数.由于HDFS上的数据很有可能被压缩或序列化sethive.auto.convert.join.noconditionaltask.size100000000(100~200MB)--如果一个简单查询只包括一个group by和order by此处可以设置为1或2hive.optimize.reducededuplication.min.reducer4;--如果数据已经根据相同的key做好聚合那么去除掉多余的map/reduce作业hive.optimize.reducededuplicationtrue;--合并小文件--hive.merge.mapfilestrue; --mr上--hive.merge.mapredfilesfalsehive.merge.smallfiles.avgsize16000000hive.merge.size.per.task256000000hive.merge.sparkfilestrue;--hive.merge.tezfilestrue; --tez上sethive.merge.orcfile.stripe.leveltrue;--Map Join优化, 不太大的表直接通过map过程做joinhive.auto.convert.jointrue;hive.auto.convert.join.noconditionaltasktrue;--可以被转化为HashMap放入内存的表的大小hive.auto.convert.join.noconditionaltask.size20M(might needtoincreaseforSpark,200M)--如果数据按照join的key分桶hive将简单优化inner join(官方推荐关闭)sethive.optimize.bucketmapjoinfalse;hive.optimize.bucketmapjoin.sortedmergefalse;--所有map任务可以用作Hashtable的内存百分比, 如果OOM, 调小这个参数(官方默认0.5)hive.map.aggr.hash.percentmemory0.5--map端聚合(跟group by有关), 如果开启, Hive将会在map端做第一级的聚合, 会用更多的内存hive.map.aggrtrue;--hive0.13有个bug, 开启这个配置会对所有字段排序hive.optimize.sort.dynamic.partitionfalse;--新创建的表/分区是否自动计算统计数据hive.stats.autogathertruehive.stats.fetch.column.statstruehive.compute.query.using.statstrue;--在order by limit查询中分配给存储Top K的内存为10%hive.limit.pushdown.memory.usage0.4(MRandSpark)--是否开启自动使用索引hive.optimize.index.filtertrue--单个reduce处理的数据量 (影响reduce的数量)hive.exec.reducers.bytes.per.reducer67108864--Map Join任务HashMap中key对应value数量hive.smbjoin.cache.rows10000--将只有SELECT, FILTER, LIMIT转化为FETCH, 减少等待时间hive.fetch.task.conversionmore hive.fetch.task.conversion.threshold1073741824--hive.optimize.ppdtrue————————————————版权声明本文为CSDN博主「从前慢」的原创文章遵循CC 4.0 BY-SA版权协议转载请附上原文出处链接及本声明。原文链接https://blog.csdn.net/weixin_47952712/article/details/119670536