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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容