假设在HDFS中存储时块大小是默认的64MB。现在我将InputSplit大小更改为128MB。
其中一个数据节点只有1个本地存储的信息块。 JobTracker为它提供了一个映射器。它如何在128MB大小的分割上运行map()?
答案 0 :(得分:1)
128 MB文件,块大小为64 MB - >默认值 - > 2映射任务 128 MB文件,块大小为64 MB - >最小分割尺寸128 MB - > 1地图任务
你可以这样做,但你会失去地方。默认拆分算法坚持的原因 阻止边界是这样的,每个任务单独处理一个块,并且 调度程序可以在使单个块所在的位置运行任务时执行更有效的工作。
当你覆盖min-spit-size并使分割携带两个块的偏移量+长度时, 那么这两个块可能驻留在不同的节点上,但任务只能在一个节点上运行 节点,导致非数据本地处理,最终可能会变慢。
答案 1 :(得分:0)
在这种情况下,您实际上确保需要转发到映射器的部分数据不是运行该映射器的节点的本地数据。
hadoop框架将确保mapper获取数据,但这意味着网络流量会增加。