美文网首页
hive参数优化

hive参数优化

作者: wangliang938 | 来源:发表于2017-01-28 19:34 被阅读790次

    目录

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

    代码块中的参数值都是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。

    相关文章

      网友评论

          本文标题:hive参数优化

          本文链接:https://www.haomeiwen.com/subject/xylrbttx.html