1. MapReduce跑的慢的原因
MapReduce 程序效率的瓶颈在于两点:
计算机性能 CPU、内存、磁盘、网络
I/O 操作
数据倾斜
map 和 reduce 数设置不合理
map 运行时间太长,导致 reduce 等待过久
小文件过多
大量的不可分块的超大文件(例:通过 gzip 压缩后的文件)
spill(溢写)次数过多
merge(map 端合并或 reduce 端合并)次数过多
2. MapReduce优化方法
MapReduce 优化方法主要从六个方面考虑:数据输入、Map 阶段、Reduce 阶段、IO 传输、数据倾斜问题和常用的调优参数。
2.1. 数据输入
合并小文件:在执行 mr 任务前将小文件进行合并,大量的小文件会产生大量的 map 任务,增大 map 任务装载次数,而任务的装载比较耗时,从而导致 mr 运行较慢。
采用 CombineTextInputFormat 来作为输入,解决输入端大量小文件的场景。
2.2. Map阶段
减少溢写(spill)次数:通过调整 io.sort.mb增大环形缓冲区的大小;调整 sort.spill.percent减少溢写的频率,从而减少磁盘IO。
减少合并(me