所以映射器只在包含给定数据 block 的给定从节点上执行一次,对吗?
但是 Reducer 可能会执行多次,因为同一个键可能来自许多 Mapper 节点,对吗?
此外,对于单个 MapReduce 作业,每个 Mapper 都会进行 Shuffle 和 Sort 是否正确?
最佳答案
一般来说,我认为说Mapper/Reducer被执行了多少次是不合适的,因为它们广泛分布在不同的节点中,由MRv1中的JobTracker或MRv2中的ResourceManager调度。但希望我下面的回答可以帮助您更好地理解。
问:“所以映射器只在包含给定数据 block 的给定从节点上执行一次,对吗?”
答:在大多数情况下是正确的。通常,hadoop 会为每个输入拆分(默认情况下与数据 block 大小相同)启动一个映射器,但如果映射器失败,它会启动一个新的映射器。
问:“但是 Reducer 可能会执行多次,因为同一个键可能来自许多 Mapper 节点,对吗?”
答:不正确。 Shuffle 和 Sort 过程会将所有映射器输出合并到一个排序的输入中,并提供给 reducer。 reducer的个数由用户定义。
问题:“另外,对于单个 MapReduce 作业,每个 Mapper 上都会发生 Shuffle 和 Sort 是否正确?”
答:不准确。洗牌阶段是 hadoop 执行的过程,用于对映射器的输出进行排序并将其传输到缩减器作为输入。当所有映射器的输出都被复制后,排序阶段将合并所有输出并保持它们的排序顺序。所以从技术上讲,洗牌和排序的第一部分发生在每个映射器上。
谢谢
关于Hadoop Reducer 执行重现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21061699/