hadoop - Hadoop 中的 reduce 任务什么时候开始?

标签 hadoop mapreduce reduce

在 Hadoop 中,reduce 任务什么时候开始?它们是否在一定比例(阈值)的映射器完成后开始?如果是这样,这个阈值是固定的吗?通常使用什么样的阈值?

最佳答案

reduce 阶段有 3 个步骤:shuffle、sort、reduce。 Shuffle 是 reducer 从每个 mapper 收集数据的地方。这可能在映射器生成数据时发生,因为它只是数据传输。另一方面,排序和归约只能在所有映射器完成后才能开始。您可以通过查看 reducer 完成百分比来判断 MapReduce 在做什么:0-33% 表示它在做 shuffle,34-66% 是排序,67%-100% 是 reduce。这就是为什么您的 reducer 有时似乎“停滞”在 33%——它正在等待映射器完成。

Reducers 根据已完成的映射器百分比阈值开始洗牌。您可以更改参数以使 reducer 早晚启动。

为什么尽早启动 reducer 是一件好事?因为它随着时间的推移分散了从映射器到缩减器的数据传输,如果您的网络是瓶颈,这是一件好事。

为什么过早启动 reducer 是一件坏事?因为他们“占用”减少了插槽,同时只复制数据并等待映射器完成。稍后开始的另一个实际使用 reduce 插槽的作业现在无法使用它们。

您可以通过更改 mapred-site.xmlmapred.reduce.slowstart.completed.maps 的默认值来自定义 reducer 何时启动。 1.00 的值将在启动 reducer 之前等待所有映射器完成。 0.0 的值将立即启动 reducer 。 0.5 的值将在一半映射器完成时启动缩减器。您还可以逐个作业更改 mapred.reduce.slowstart.completed.maps在新版本的 Hadoop(至少 2.4.1)中调用的参数是 mapreduce.job.reduce.slowstart.completedmaps(感谢用户 yegor256)。

通常,如果系统同时运行多个作业,我喜欢将 mapred.reduce.slowstart.completed.maps 保持在 0.9 以上。这样,当 reducers 除了复制数据之外什么都不做时,工作就不会占用 reducers。如果您一次只运行一个作业,则执行 0.1 可能是合适的。

关于hadoop - Hadoop 中的 reduce 任务什么时候开始?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11672676/

相关文章:

csv - Hive 外部表未从 CSV 源读取整个字符串

json - Piggybank中缺少JsonLoader

java - 可写收集问题

sql - Hive中哪一个更快? “in”或 “or”?

javascript - 使用过滤,优先级和最小循环将数组转换为对象

javascript - 在 Javascript 中使用数组作为值创建对象数组

hadoop - 使用 hadoop map reduce 比较两个文本文件

javascript - 使用聚合框架或 MapReduce 将事件数据中的文档嵌入到 MongoDB 中

macos - intelliJ IDEA 设置中的 Mac 上的 Hadoop

javascript - 如何循环遍历对象的对象和对象数组,并根据匹配数组元素的计数更新嵌套对象值?