Hadoop-MapReduce优化方法

本文探讨了MapReduce性能慢的原因,包括计算机性能、I/O操作和数据倾斜等问题,并提出了从数据输入、Map阶段、Reduce阶段、IO传输、数据倾斜优化及调优参数等六个方面的解决方案。建议采用CombineTextInputFormat合并小文件,调整Map和Reduce任务数量,使用数据压缩减少网络I/O,并通过自定义分区和Map Join解决数据倾斜。
摘要由CSDN通过智能技术生成

    MapReduce跑的慢的原因:

  1. 计算机性能:CPU、内存、磁盘健康、网络。
  2. I/O操作优化:数据倾斜、Map和Reduce设置不合理、Map运行时间太长导致Reduce等待过久、小文件过多、大量的不可分块的超大文件、溢写次数过多、合并过多。

    MapReduce优化方法主要从六个方面考虑:数据输入、Map阶段、Reduce阶段、IO传输、数据倾斜问题和常用的调优参数。

数据输入

  1. 合并小文件:在执行MapReduce任务前将小文件进行合并,大量的小文件会产生大量的Map任务,增大Map任务装载次数。而任务的装载比较耗时,从而导致MapReduce运行较慢。
  2. 采用CombineTextInputFormat来作为输入,解决输入端大量小文件场景。

Map阶段

  1. 减少溢写(Spill)次数,通过调整io.sort.mbsort.spill.percent参数值,增大触发溢写的内存上限,减少溢写次数,从而减少磁盘I/O。
  2. 减少合并(Merge)次数,通过调整io.sort.factor参数,增大合并的文件数目,减少合并的次数,从而缩短处理时间。
  3. 在Map之后,不影响业务逻辑前提下,先进行Combiner处理,减少I/O。

Reduce阶段

  1. 合理设置Map和Reduce数:太少会导致Task等待,延长处理时间;太多会导致任务间竞争资源,造成处理超时等错误。
  2. 设置Map和Reduce共存:调整slowstart.completemaps参数,使Map运行到一定程度后,Reduce也可以开始运行,减少Reduce的等待时间。
  3. 避免使用Reduce,因为Reduce在用于连接数据集的时候,将会产生大量的网络消耗。
  4. 合理设置Reduce端的Buffer:默认情况下,数据达到一个阈值的时候,Buffer中的数据就会写入磁盘,然后Reduce会从磁盘中
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值