在hadoop中绕过Mapreduce作业的洗牌阶段?

时间:2016-12-22 12:49:28

标签: hadoop asynchronous mapreduce

我正在尝试实现一种算法,其中只需要一个reducer,mapreduce job正在迭代执行。特定迭代中每个映射器的结果将在reducer中添加,然后进行处理。然后在其他迭代中将reducer的输出作为输入传递给mapper。我希望以异步方式执行作业,即只要执行预定义数量的映射器,就将输出直接传递给reducer,即避免混洗和排序,因为它只为我的算法创建开销。这甚至可能吗?如果没有,可以在实现级别对mapreduce作业进行异步处理。我参加了许多研究论文,但无法从那里得到任何想法。

感谢。

1 个答案:

答案 0 :(得分:3)

您必须为此编写自己的自定义解决方案。我最近在一个项目中做了类似的事情。

它需要一些代码,所以我只能概述这里的步骤:)

  • mapreduce.job.reduce.slowstart.completedmaps设置为0.0,以便缩减器在映射器完成之前启动(这将立即为您提供加速。在继续执行以下步骤之前尝试一下;)也许它&# 39;足够了)
  • 实现自己的org.apache.hadoop.mapred.MapOutputCollector将shuffle输出写入Socket而不是标准的shuffle路径(这是映射器端)
  • 实现您自己的org.apache.hadoop.mapred.ShuffleConsumerPlugin等待映射器连接并从网络读取对(这是减速器端)

您需要做的事情:

  • 同步映射器在reducer实际监听之前没有启动(Zookeeper就是我在这里使用的)
  • 调整作业配置以使用自定义映射器和缩减器组件

进一步阅读:https://hadoop.apache.org/docs/r2.6.0/hadoop-mapreduce-client/hadoop-mapreduce-client-core/PluggableShuffleAndPluggableSort.html

业。可行,但需要一些努力:)