Hadoop 输入拆分与块
Hadoop input split vs block
- 假设一个 64 MB 的块在节点 A 上并在其他 2 个节点(B、C)之间复制,并且 map-reduce 程序的输入分割大小为 64 MB,这个分割是否只有节点的位置一个?或者它会包含所有三个节点 A、b、C 的位置吗?
- 由于数据对于所有三个节点都是本地的,因此框架如何决定(选择)映射任务到特定节点上的 运行?
- 如果 Input Split 大小大于或小于块大小,如何处理?
Hadoop 知道块所在的位置。如果拆分恰好等于一个块,则 Hadoop 将尝试 运行 同一节点上的映射任务以应用 "data locality" 原则并保存所需的任何网络传输。
如果 A、B、C 都可用,则映射任务将 运行 在离客户端最近的节点上。如果节点 A 不可用,则它 运行 在 B 或 C 上,具体取决于哪一个离客户端最近。
如果 A、B、C 都不可用,则 Hadoop 将找出 A、B 或 C 中哪个节点最接近客户端,然后 select 与 A 在同一机架上的空闲节点(因为机架内传输速度更快)。如果整个机架都忙,那么它将别无选择,只能选择不同的机架和节点来处理拆分。 split会临时复制到节点中,处理完成后会从临时位置删除。
但是,如果输入拆分大于块大小,则适用完全相同的原则。唯一不同的是Hadoop框架会把'split + few lines from block 2'交给节点处理。
- 假设一个 64 MB 的块在节点 A 上并在其他 2 个节点(B、C)之间复制,并且 map-reduce 程序的输入分割大小为 64 MB,这个分割是否只有节点的位置一个?或者它会包含所有三个节点 A、b、C 的位置吗?
- 由于数据对于所有三个节点都是本地的,因此框架如何决定(选择)映射任务到特定节点上的 运行?
- 如果 Input Split 大小大于或小于块大小,如何处理?
Hadoop 知道块所在的位置。如果拆分恰好等于一个块,则 Hadoop 将尝试 运行 同一节点上的映射任务以应用 "data locality" 原则并保存所需的任何网络传输。
如果 A、B、C 都可用,则映射任务将 运行 在离客户端最近的节点上。如果节点 A 不可用,则它 运行 在 B 或 C 上,具体取决于哪一个离客户端最近。
如果 A、B、C 都不可用,则 Hadoop 将找出 A、B 或 C 中哪个节点最接近客户端,然后 select 与 A 在同一机架上的空闲节点(因为机架内传输速度更快)。如果整个机架都忙,那么它将别无选择,只能选择不同的机架和节点来处理拆分。 split会临时复制到节点中,处理完成后会从临时位置删除。
但是,如果输入拆分大于块大小,则适用完全相同的原则。唯一不同的是Hadoop框架会把'split + few lines from block 2'交给节点处理。