【发布时间】:2014-11-10 23:10:09
【问题描述】:
这是一个概念问题。当 Mapper Functions 完成时,它会在本地节点上发出中间键值对。如果假设 Jobtracker 选择 reducer 从不同节点运行,数据移动是否跨节点发生?
如果是,请让我知道只有在所有 Mapper 阶段完成后,reduce 阶段才会开始。或者是否会有任何后台进程在单个映射器完成后立即运行,将数据移动/复制到 Reducer 节点?
如果这个问题很傻,请忽略:(
【问题讨论】:
这是一个概念问题。当 Mapper Functions 完成时,它会在本地节点上发出中间键值对。如果假设 Jobtracker 选择 reducer 从不同节点运行,数据移动是否跨节点发生?
如果是,请让我知道只有在所有 Mapper 阶段完成后,reduce 阶段才会开始。或者是否会有任何后台进程在单个映射器完成后立即运行,将数据移动/复制到 Reducer 节点?
如果这个问题很傻,请忽略:(
【问题讨论】:
如果假设 Jobtracker 选择 reducer 从不同节点运行,数据移动是否跨节点发生?
是的,如果 Reducetask 运行在不同的节点上,那么数据移动发生在节点之间。
请让我知道只有在所有 Mapper 阶段完成后,reduce 阶段才会开始。
Reduce 任务在所有Mapper 完成之前不会被初始化。但是map任务可能在不同的时间完成,所以Reduce任务在每个map完成后就开始复制Mapper的数据。这被称为reduce任务的copy阶段。一旦所有的映射器都完成了处理并且所有的数据都在reducer端聚合了,那么reduce方法就会被初始化。
是否会有任何后台进程在单个映射器完成后立即运行,将数据移动/复制到 Reducer 节点?
Mapper 的中间数据由 TaskTracker 托管的内部 jetty Web 服务器提供服务,reduce 任务具有一组线程,这些线程将从 mapred.reduce.parallel.copies 指定的并行映射输出中复制数据。
【讨论】: