1

第一个问题:我想知道拆分是否以任何方式更改了块(即更改大小、将块移动到另一个位置、创建新块……)。

第二个问题:我认为拆分不会更改块,但它指定每个 MapTask 应该存在并在集群上运行以获取数据的局部性或机架感知,因为 DataNode 已经在运行并且正在拥有块,所以我认为拆分会告诉 Hadoop 在包含数据的节点旁边运行 MapTask。注意:在 InputSplit 中有我认为用于此目的的位置/主机。如果我错了请纠正我

第三个问题:最初在实际执行任务之前,blocks会移动到MapTask所在的位置还是MapTask会移动到blocks所在的位置(即DataNode的位置)?

4

1 回答 1

0

对于您的第一个和第二个问题:

块不会随着拆分而改变。为了准备 Input Split,可能会将 DataNode 块中的一些数据复制到其他 DataNode,在该 DataNode 上执行 Map 任务(如果数据在多个数据块之间重叠)

第三个问题:最初在实际执行任务之前,blocks会移动到MapTask所在的位置还是MapTask会移动到blocks所在的位置(即DataNode的位置)?

如果 MapTask 正在从 DataNode A / Block-A 获取数据,并且 DataNode A/Block-A 中的某些数据跨越到 DataNode B/Block-B,则 Block-B 中的数据将被复制到 Mapper (DataNode-A) .

请参阅以下问题以更好地理解输入拆分和数据块:

Hadoop 如何执行输入拆分?

于 2016-11-29T10:19:33.847 回答