列裁剪和分区裁剪(逻辑优化器)

  • hive.optimize.cp 列裁剪
  • hive.optimize.pruner 分区裁剪

    谓词下推(逻辑优化器)

  • hive.optimize.ppd

    将filter operator 向上提

    sort by 代替 order by

    gruop by 代替 distinct

    gruop by配置

  • hive.map.aggr map端预聚合

  • hive.groupby.skewindata 倾斜均衡 (两个job 一个job 随机到reduce、后面的job再按key聚合)
  • join优化
  • 小表前置

    多表join时key相同

  • 多个join合成一个mr job处理

    map join特性

    适合大小表
    map端完成,没有reduce

    空值或无意义值

  • 过滤掉空值

  • 随机打散

    MapReduce优化

  • 调整map数 mapper_num = MIN(split_num, MAX(default_num, mapred.map.tasks))大文件多就多

  • 调整reduce数量 reducer_num = MIN(total_input_size / reducers.bytes.per.reducer, reducers.max) 多了小文件多、少了就慢
  • 合并小文件

    • 输入阶段 CombineHiveInputFormat
    • 输出阶段 map-only任务的输出合并、将map-reduce任务的输出合并

      数据压缩

  • cpu换磁盘空间

  • Snappy

    JVM重用

  • mapred.job.reuse.jvm.num.tasks

    合适的存储格式

  • parquet、orc 列式存储