Hive SQL mapper数调优

众所周知,Hive会将SQL翻译转换成对应的MAPREDUCE任务,通过执行MAPREDUCE任务来获得最终想要的结果(执行引擎限定为mr时)。对于MAPRDUCE任务来说,选取不同的参数会生成不同的mapper与reducer数量,这对任务的执行效率有很大的影响。

  • REDUCER数量:
    mapred.reduce.tasks: 直接指定reducer数量
    set mapred.reduce.tasks = 10
    hive.exec.reducers.bytes.per.reducer:指定每个reducer处理的数据量
    set hive.exec.reducers.bytes.per.reducer = 500000000 (500M)
  • MAPPER数量:
    mapred.max.split.size 单个mapper处理的最大splits数量
    set mapred.max.split.size = 100000000
    hive.input.format 设置为CombineHiveInputFormat可以合并小文件
    set hive.input.format = CombineHiveInputFormat

    • mapper数量计算公式
      一个分片对应一个mapper
    splitSize = max{minSize,min{maxSize,blockSize}}
    maxSize = mapred.max.split.size
    minSize = max{mapreduce.input.fileinputformat.split.minsize, mapred.min.split.size}
    
  • 其他:
    mapreduce.jobtracker.split.metainfo.maxsize 如果输入文件过多,会造成split源文件超过默认值,需要调整该参数。
    set mapreduce.jobtracker.split.metainfo.maxsize = -1

你可能感兴趣的:(Hive SQL mapper数调优)