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

通过hadoop中Mapreduce作业的洗牌阶段?,hadoop,asynchronous,mapreduce,Hadoop,Asynchronous,Mapreduce,我正在尝试实现一个算法,其中只需要一个reducer,而mapreduce作业是迭代执行的。每个映射器在特定迭代中的结果将添加到reducer中,然后进行处理。然后,在另一次迭代中将减速器的输出作为输入传递给映射器。我希望以异步方式执行作业,即,一旦执行了预定义数量的映射器,就将输出直接传递给reducer,即避免洗牌和排序,因为这只会为我的算法带来开销。这可能吗?如果没有,那么在实现级别可以为mapreduce作业的异步执行做些什么。我查阅了大量的研究论文,但没有从中得到任何想法 谢谢。您必须

我正在尝试实现一个算法,其中只需要一个reducer,而mapreduce作业是迭代执行的。每个映射器在特定迭代中的结果将添加到reducer中,然后进行处理。然后,在另一次迭代中将减速器的输出作为输入传递给映射器。我希望以异步方式执行作业,即,一旦执行了预定义数量的映射器,就将输出直接传递给reducer,即避免洗牌和排序,因为这只会为我的算法带来开销。这可能吗?如果没有,那么在实现级别可以为mapreduce作业的异步执行做些什么。我查阅了大量的研究论文,但没有从中得到任何想法


谢谢。

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

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

  • mapreduce.job.reduce.slowstart.completedmaps
    设置为
    0.0
    ,以便在映射程序完成之前缩小器出现(这将立即给您一个加速。在继续执行以下步骤之前尝试一下;)可能已经足够了)
  • 实现您自己的
    org.apache.hadoop.mapred.MapOutputCollector
    ,它将无序输出写入套接字而不是标准的无序路径(这是映射器端)
  • 实现您自己的
    org.apache.hadoop.mapred.ShuffleConsumerPlugin
    ,它等待映射程序的连接并从网络中读取对(这是reducer端)
您需要做的事情:

  • 在reducer实际侦听之前同步未启动的映射程序(Zookeeper是我在这里使用的)
  • 调整作业配置以使用自定义映射器和减速器组件
进一步阅读:


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

谢谢!!我尝试将slowstart设置为0.0,但效果不好。我一定会尝试其他步骤。:)正如您在第二步中提到的,将MapOutput写入套接字而不是MapOutputFile。你指的是哪个插座?@Mohini在减速机一侧监听的某个插座,用于读取和写入插座。我需要知道计划执行减速机任务的机器。。怎么知道呢?这就是如何获得该系统的地址?@Mohini我知道的最简单的方法是按照我的建议做,并使用Zookeeper。您可以让reduce任务简单地将其自己的IP和它处理的分区一起写入某个ZK路径,然后在映射器上从那里读取它:)