我正在尝试实现一种算法,其中只需要一个reducer,mapreduce job正在迭代执行。特定迭代中每个映射器的结果将在reducer中添加,然后进行处理。然后在其他迭代中将reducer的输出作为输入传递给mapper。我希望以异步方式执行作业,即只要执行预定义数量的映射器,就将输出直接传递给reducer,即避免混洗和排序,因为它只为我的算法创建开销。这甚至可能吗?如果没有,可以在实现级别对mapreduce作业进行异步处理。我参加了许多研究论文,但无法从那里得到任何想法。
感谢。
答案 0 :(得分:3)
您必须为此编写自己的自定义解决方案。我最近在一个项目中做了类似的事情。
它需要一些代码,所以我只能概述这里的步骤:)
mapreduce.job.reduce.slowstart.completedmaps
设置为0.0
,以便缩减器在映射器完成之前启动(这将立即为您提供加速。在继续执行以下步骤之前尝试一下;)也许它&# 39;足够了)org.apache.hadoop.mapred.MapOutputCollector
将shuffle输出写入Socket而不是标准的shuffle路径(这是映射器端)org.apache.hadoop.mapred.ShuffleConsumerPlugin
等待映射器连接并从网络读取对(这是减速器端)您需要做的事情:
业。可行,但需要一些努力:)