Hive运行参数优化
Posted 数据与算法联盟
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hive运行参数优化相关的知识,希望对你有一定的参考价值。
Hive在作为数据仓库的重要工具,其内在封装的函数如果利用好了,会比写spark和mapreduce方便的多,但是随之而来也是各种问题,比如数据倾斜,小文件处理等,下边介绍一些运行HQL时的设置参数,以此达到一定程度上的优化。
小文件处理的参数
hive.merge.mapredfiles=false; //reduce输出是否合并
hive.merge.mapfiles=true; //map输出是否合并
1.修改参数 hive.merge.mapredfiles=true
2.通过mapreduece的办法生成一张新的分区表,此时生成的文件变成了每个分区一个文件
小结:
正确处理hive小文件 是 控制map数的一个重要环节.处理的不好 会大大影响任务的执行效率.
数据倾斜参数
hive.map.aggr=true //map端是否聚合 hive.map.aggr.hash.force.flush.memory.threshold=0.9 hive.map.aggr.hash.min.reduction=0.5 hive.map.aggr.hash.percentmemory=0.5 hive.groupby.skewindata=false; //是否开启倾斜优化 set hive.exec.reducers.max=200; set mapred.reduce.tasks= 200;---增大Reduce个数 set hive.groupby.mapaggr.checkinterval=100000 ; --这个是group的键对应的记录条数超过这个值则会进行分拆, --值根据具体数据量设置 set hive.groupby.skewindata=true; --如果是group by过程出现倾斜 应该设置为true set hive.skewjoin.key=100000; --这个是join的键对应的记录条数超过这个值则会进行分拆, --值根据具体数据量设置 set hive.optimize.skewjoin=true;--如果是join 过程出现倾斜 -- 应该设置为true
hive.map.aggr=true // map端聚合,相当于combiner
hive.groupby.skewindata=true //数据倾斜优化,为true时,查询计划生产两个mapreduce,第一个mr随机处理,第二个按照业务主键聚合,
分区表参数
hive.exec.dynamic.partition=true; -- 是否允许动态分区 hive.exec.dynamic.partition.mode=strict; -- strict是避免 -- 全分区字段是动态的,必须有至少一个分区字段是指定有值的.另一个值 -- 为 nonstrict //以下是配置阀值 hive.exec.max.created.files=100000; -- 一个DML操作可以创建的 -- 文件数 hive.exec.max.dynamic.partitions=1000; -- 一个DML操作可以 -- 创建的最大动态分区数 hive.exec.max.dynamic.partitions.pernode=100; -- each mapper or reducer 可以创建的最大动态分区数
并行执行参数
hive.exec.parallel=false; -- 打开任务并行执行 set hive.exec.parallel.thread.number=16; -- 同一个sql允许最大并行度,默认为8。
对于同一个SQL产生的JOB,如果不存在依赖的情况下,将会并行启动JOB
以上是关于Hive运行参数优化的主要内容,如果未能解决你的问题,请参考以下文章