Hadoop map reduce - 只有在所有 maps 运行后才将 mapper 的输出发送到 reduce

标签 hadoop mapreduce

只有在所有 map 运行后,我才需要在单台计算机上发送我的 map 绘制器的输出。

例如:

如果计算机 #1 运行他的 map 功能 1000 次,我希望在所有 1000 次 map 发生后发送输出。

有什么办法吗?

编辑-解释我为什么要这样做:

我正在实现算法树冠。 我的计划是在我拥有的每台机器上运行 canopy 并找到它的本地数据的质心。

一旦找到本地质心,我想将本地质心以及与它们相关的点数发送到 reducer。

例如: 机器 #1 找到了 3 个质心,每个质心都有 30 个 View 。 我想提交减少(质心, View )。 但问题是只有在机器的所有 map 功能运行后我才会知道 View 。 这就是为什么我想在所有运行后发送机器映射器的输出以减少。

最佳答案

实现接近于此的唯一方法是调整配置属性 mapreduce.job.reduce.slowstart.completedmapsmapred-default.xml 的 Apache Hadoop 文档中讨论了此设置.

<property>
  <name>mapreduce.job.reduce.slowstart.completedmaps</name>
  <value>0.05</value>
  <description>Fraction of the number of maps in the job which should be 
  complete before reduces are scheduled for the job. 
  </description>
</property>

但是,错误调整此设置可能会损害集群的吞吐量。通常,reducer 可以在 map 任务完成时尽早开始获取中间 map 输出。将其调整为 1.0 将阻止 reducer 在所有 map 任务完成之前获取任何内容。当最后一个 map 任务完成并且 reducer 开始获取时,这将导致网络带宽利用率突然激增。

通常,reducer 获取 map 输出的时间不应改变 MapReduce 程序的正确性。这一切都发生在 MapReduce shuffle 内部。无论 reducer 如何获取 map 输出的时间如何,最终呈现给 reducer 代码的数据都是相同的。

关于Hadoop map reduce - 只有在所有 maps 运行后才将 mapper 的输出发送到 reduce,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34619276/

相关文章:

java - setMapoutputkeyclass和setMapoutputvalueclass方法

hadoop - 使用不同集群的 HDFS 时的数据局部性

java - 修复 java.lang.NoSuchMethodError : com. amazonaws.util.StringUtils.trim

hadoop - wordCount mapReduce 作业如何与 apache tez 在 hadoop yarn 集群上运行?

Hadoop 2.6.0 官方实例 : Yarn (MR2) much slower than Map Reduce (MR1) in single node setup

scala - 错误:对象rocksdb不是软件包orgs的成员

hadoop - Combiner 实现和内部工作

shell - 在 Hortonworks 上安装 Apache Kylin check-env.sh 时出错

java - 无法使用distcp将一个HDFS数据复制到另一个HDFS位置

java - 无法找到或加载主类 com.sun.tools.javac.Main hadoop mapreduce