1

以下是我对 InputSplits 及其与映射器的交互的理解......如果我在某处错了,请纠正我......

InputFormat 生成 InputSplits,并为每个 inputSplit 生成一个映射任务。对于数据局部性,通常在物理上承载 InputSplit 引用的块的数据节点上选择一个映射槽。想象一下,这里没有数据复制。

如果块所在的数据节点上没有可用的映射槽会怎样?jobtracker 会等待在这个数据节点上获得一个空槽,然后在这个数据节点上调度映射器,还是会在任何其他有空闲映射槽的节点上调度映射,然后从第一个数据节点流式传输数据?

4

1 回答 1

1

后者。您可以在工作中看到以下计数器:

Data-local map tasks=46
Rack-local map tasks=5

Data-local map 任务的数量是指有多少个 map 任务在同一个 datanode 上运行而不通过网络传输数据。Rack-local map 任务的数量意味着有多少个 map 任务在不同的数据节点上运行并通过网络传输数据。

数量Rack-local map tasks仅考虑机架本地的节点。如果您有一些任务使用不同机架中某些节点的数据(意味着同一机架中没有插槽),它将被Other local map tasks. 但是,此类任务需要跨机架传输数据。您可以在此处确认日期节点选择的逻辑。

于 2013-06-09T01:31:53.663 回答