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运行参数优化

数据倾斜参数



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     

1.通过修改参数
hive.map.aggr=true // map端聚合,相当于combiner
hive.groupby.skewindata=true //数据倾斜优化,为true时,查询计划生产两个mapreduce,第一个mr随机处理,第二个按照业务主键聚合,


Hive运行参数优化

分区表参数


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运行参数优化的主要内容,如果未能解决你的问题,请参考以下文章

hive性能优化及参数调优

Hive 中推荐的优化技术都有哪些?

Hive2优化参数

Hive入门函数提升

Hive优化策略

Hive参数优化和数据倾斜