开发者社区> 问答> 正文

Mapreduce的reduce阶段优化是怎么实现的?

Mapreduce的reduce阶段优化是怎么实现的?

展开
收起
游客y244y7ln2rlpa 2021-12-05 16:36:31 299 0
1 条回答
写回答
取消 提交回答
  • Mapreduce的reduce阶段优化:

    (1) 合理设置map和reduce数: 两个都不能设置太少,也不能设置太多。太少,会导致task等待,延长处理时间;太多会导致map、reduce任务间竞争资源,造成处理超时等错误。

    (2)设置map、reduce共存: 调整slowstart.completedmaps参数,使map运行到一定程度后,reduce也开始运行,减少reduce的等待时间。

    (3)规避使用reduce,因为Reduce在用于连接数据集的时候将会产生大量的网络消耗(减少shuffle的过程,因为shuffle过程很耗时,消耗的资源很多)

    (4)合理设置reduc端的buffer,默认情况下,数据达到一个阈值的时候,buffer中的数据就会写入磁盘,然后reduce会从磁盘中获得所有的数据。也就是说,buffer和reduce是 没有直接关联的,中间多个一个写磁盘->读磁盘的过程,既然有这个弊端,那么就可以通过参数来配置,使得buffer中的一 部分数据可以直接输送到reduce,从而减少I0开销:mapred.job.reduce.input.buffer.percent,默认为0.0。当值大于0的时候,会保留指定比例的内存读buffer中的数据直接拿给reduce使用。这样一来,设置buffer需要内存,读取数据需要内存,reduce计算也要内存,所以要根据作业的运行情况进行调整。

    2021-12-05 16:40:34
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
基于E-MapReduce梨视频推荐系统 立即下载
大数据解决方案构建详解 以阿里云E-MapReduce为例 立即下载
阿里云E-MapReduce 立即下载