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

vof42yt1  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(377)

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

gk7wooem

gk7wooem1#

您必须为此编写自己的自定义解决方案。我最近在一个项目中也做了类似的事情。
它需要一些代码,所以我只能在这里概述一下步骤:)
mapreduce.job.reduce.slowstart.completedmaps0.0 所以减速器在Map绘制完成之前就出现了(顺便说一句,这会给你一个加速效果。在继续下面的步骤之前先试试看;)也许足够了)
实现你自己的 org.apache.hadoop.mapred.MapOutputCollector 将随机播放输出写入套接字而不是标准随机播放路径(这是Map器端)
实现你自己的 org.apache.hadoop.mapred.ShuffleConsumerPlugin 等待Map器连接并从网络中读取对(这是reducer端)
你需要做的事情:
在reducer实际监听之前同步Map器(zookeeper是我在这里使用的)
调整作业配置以使用自定义Map器和缩减器组件
进一步阅读:https://hadoop.apache.org/docs/r2.6.0/hadoop-mapreduce-client/hadoop-mapreduce-client-core/pluggableshuffleandpluggablesort.html
定义。可行,但需要一些努力:)

相关问题