内存、cpu优化

  1. ****************************map
  2. 默认MapTask内存上限1024MB
  3. mapreduce.map.memory.mb
  4. 控制MapTask堆内存大小
  5. mapreduce.map.java.opts
  6. 默认MapTask的CPU核数1
  7. mapreduce.map.cpu.vcores
  8. ****************************reduce
  9. 默认ReduceTask内存上限1024MB
  10. mapreduce.reduce.memory.mb
  11. 控制ReduceTask堆内存大小
  12. mapreduce.reduce.java.opts
  13. 默认ReduceTask的CPU核数1个
  14. mapreduce.reduce.cpu.vcores
  15. 当MapTask完成的比 例达到该值后才会为ReduceTask申请资源。默认是0.05
  16. mapreduce.job.reduce.slowstart.completedmaps
  17. 如果一个Task在一定时间内没有任何进入, 即不会读取新的数据,也没有输出数据,则认为该Task处于Block状态, 可能是卡住了,也许永远会卡住,为了防止因为用户程序永远Block住 不退出,则强制设置了一个该超时时间(单位毫秒),默认是600000 (10分钟)。如果你的程序对每条输入数据的处理时间过长,建议将 该参数调大。
  18. mapreduce.task.timeout

spill

  1. mapred-site.xml
  2. <!-- 环形缓冲区大小,默认100m 改成200M-->
  3. <property>
  4. <name>mapreduce.task.io.sort.mb</name>
  5. <value>100</value>
  6. </property>
  7. <!-- 环形缓冲区溢写阈值,默认0.8 改为0.9-->
  8. <property>
  9. <name>mapreduce.map.sort.spill.percent</name>
  10. <value>0.80</value>
  11. </property>

merge

mapred-site.xml

<!-- merge每次合并多少个spill文件,默认10个 改为20--> 
<property>
<name>mapreduce.task.io.sort.factor</name>
<value>10</value>
</property>

combiner

不影响业务前提下,在map端聚合

reduce拉取

mapred-site.xml

每个Reduce去Map 中拉取数据的并行数,默认值是5。可以提高到10
<property>
<name>mapreduce.reduce.shuffle.parallelcopies</name>
<value>5</value>
</property>

<!-- Buffer 大小占 Reduce 可用内存的比例,默认值 0.7 --> 
<property>
<name>mapreduce.reduce.shuffle.input.buffer.percent</name>
<value>0.70</value>
</property>
<!-- Buffer 中的数据达到多少比例开始写入磁盘,默认值 0.66。 --> 
<property>
<name>mapreduce.reduce.shuffle.merge.percent</name>
<value>0.66</value>
</property>

压缩优化

image.png
image.png