一、MapReduce跑得慢的原因
MapReduce的瓶颈有一下两点:
1、计算机硬件方面
CPU、内存、网络、硬盘等。
2、I/O方面
1、数据倾斜的问题
2、map和reduce设置的个数不合理
3、spill溢写设置的不合理,导致溢写个数过多
4、merge归并文件个数设置不合理,导致归并个数过多
5、map运行的时间过长,导致reduce等待时间太久
6、小文件太多
7、大量的不可分块的超大文件
二、MapReduce的优化方法
MapReduce的优化方法主要从六个方面考虑:数据输入、map阶段、reduce阶段、I/O传输、数据倾斜和系统参数配置。
1、数据输入
a、小文件合并:在执行mr任务前,将大量小文件数据进行合并处理,如果大量小文件输入会导致map任务装载次数增大,map每次装载是很耗时的,所以导致mr运行慢。
b、使用CombineTextInputFormat作为输入,来解决大量小文件的问题。
2、map阶段
a、减少spill(溢写)次数:通过设置 io.sort.mb 及 sort.spill.percent来增大触发spill的内存上限值,从而spill溢写的次数,减少磁盘I/O。
b、减少merge(合并)次数:通过设置 io.sort.factor 参数来增大merge文件上限值,减少merge合并文件的次数,从而增加mr的执行效率。
c、在map之后,在不影响业务的情况下,可以使用combine处理,从而减少I/O传输。
3、reduce阶段
a、合理设置map