【发布时间】:2014-01-30 10:51:13
【问题描述】:
所以 Mapper 只在包含给定数据块的给定从节点上执行一次,对吗?
但是 Reducer 可能会执行多次,因为同一个 key 可能来自多个 Mapper 节点,对吗?
对于单个 MapReduce 作业,Shuffle 和 Sort 将在每个 Mapper 上发生是否正确?
【问题讨论】:
所以 Mapper 只在包含给定数据块的给定从节点上执行一次,对吗?
但是 Reducer 可能会执行多次,因为同一个 key 可能来自多个 Mapper 节点,对吗?
对于单个 MapReduce 作业,Shuffle 和 Sort 将在每个 Mapper 上发生是否正确?
【问题讨论】:
一般来说,我认为不应该说 Mapper/Reducer 执行了多少次,因为它们广泛分布在不同的节点中,并由 MRv1 中的 JobTracker 或 MRv2 中的 ResourceManager 调度。但希望我下面的回答可以帮助您更好地理解。
问:“所以 Mapper 只在包含给定数据块的给定从节点上执行一次,对吗?”
答:大多数情况下是正确的。通常情况下,hadoop 会为每个输入拆分启动一个映射器(默认情况下与数据块大小相同),但如果映射器失败,它将启动一个新的映射器。
问:“但是 Reducer 可能会执行多次,因为同一个 key 可能来自多个 Mapper 节点,对吗?”
答:不正确。 Shuffle 和 Sort 过程会将所有 mapper 输出合并到一个单独的排序输入中,并提供给 reducer。 reducer 的数量由用户定义。
问:“对于单个 MapReduce 作业,Shuffle 和 Sort 将在每个 Mapper 上发生也是正确的吗?”
答:不准确。 Shuffle 阶段是 hadoop 执行的过程,用于对映射器的输出进行排序并将映射器的输出作为输入传输到 reducer。当所有映射器的输出都被复制后,排序阶段将合并所有输出并保持它们的排序顺序。所以从技术上讲,Shuffle 和 Sort 的第一部分发生在每个映射器上。
谢谢
【讨论】: