hive参数优化

目录

  • 小文件处理的参数
  • 数据倾斜参数
  • 分区表参数
  • 并行执行参数

代码块中的参数值都是cdh 5.7的默认值.
查看hive配置的方式为

[root@namenode1 ~]# hive -e "set"| grep hive.merge.mapredfiles
  • 1,小文件处理的参数
hive.merge.mapredfiles=false   //reduce输出是否合并
hive.merge.mapfiles=true     //map输出是否合并

解决办法:
1.修改参数 hive.merge.mapredfiles=true
2.通过mapreduece的办法生成一张新的分区表,此时生成的文件变成了每个分区一个文件
小结:
正确处理hive小文件 是 控制map数的一个重要环节.处理的不好 会大大影响任务的执行效率.

  • 2,数据倾斜参数
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随机处理,第二个按照业务主键聚合,

  • 3,分区表参数
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可以创建的最大动态分区数
  • 4,并行执行参数
 hive.exec.parallel=false;   //打开任务并行执行
set hive.exec.parallel.thread.number=16; //同一个sql允许最大并行度,默认为8。

对于同一个SQL产生的JOB,如果不存在依赖的情况下,将会并行启动JOB。

    原文作者:wangliang938
    原文地址: https://www.jianshu.com/p/7542f3a7513d
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞