假设在hdfs中存储时,块大小是默认的64mb。现在我将inputsplit大小更改为128mb。其中一个数据节点只有一个本地存储的信息块。求职者给了它一个Map。它如何在128mb大小的拆分上运行map()?
enxuqcxy1#
在这种情况下,您可以有效地确保需要转到Map器的部分数据不是运行该Map器的节点的本地数据。hadoop框架将确保mapper获得数据,但这将意味着网络流量的增加。
omhiaaxx2#
128 mb文件,64 mb块大小-->默认值-->2个Map任务128 mb文件,64 mb块大小-->最小拆分大小128 mb-->1个Map任务你可以这样做,但你会失去位置。默认拆分算法坚持块边界的原因是,每个任务单独处理一个块,调度器可以更有效地使任务在该块所在的位置运行。当您重写min spit size并使拆分携带值为offset+length的两个块时,这两个块可能驻留在不同的节点上,但任务将仅在一个节点上运行,从而导致非数据本地处理,这最终可能会变慢。
2条答案
按热度按时间enxuqcxy1#
在这种情况下,您可以有效地确保需要转到Map器的部分数据不是运行该Map器的节点的本地数据。
hadoop框架将确保mapper获得数据,但这将意味着网络流量的增加。
omhiaaxx2#
128 mb文件,64 mb块大小-->默认值-->2个Map任务128 mb文件,64 mb块大小-->最小拆分大小128 mb-->1个Map任务
你可以这样做,但你会失去位置。默认拆分算法坚持块边界的原因是,每个任务单独处理一个块,调度器可以更有效地使任务在该块所在的位置运行。
当您重写min spit size并使拆分携带值为offset+length的两个块时,这两个块可能驻留在不同的节点上,但任务将仅在一个节点上运行,从而导致非数据本地处理,这最终可能会变慢。