我阅读了以下维基,但仍然无法澄清一件事。

https://wiki.apache.org/hadoop/HadoopMapReduce

说,我有一个大文件,该文件分为两个HDFS块,并且这些块实际上存储在2台不同的计算机中。考虑在集群中没有这样的节点在本地托管两个块。据我了解,在TextInputFormat中,HDFS块大小通常与拆分大小相同。现在,由于有2个分割,因此将在2个单独的本地存储块的机器中生成2个 map 实例。现在,假设HDFS文本文件已在一行的中间断开以形成块。 hadoop现在是否将从第二台机器复制块2到第一台机器,以便它可以提供第二个块的第一行(折半)以完成第一块的最后折线?

最佳答案



Hadoop不会将块复制到运行map任务的节点上,而是将块从数据节点流传输到任务节点(具有一些合理的传输块大小,例如4kb)。因此,在您给出的示例中,处理第一个块的map任务将读取整个第一个块,然后以流方式读取第二个块,直到找到行末字符。因此,它大概是“本地”的。

读取第二个块的多少取决于行的长度-完全有可能由3个映射任务来处理拆分为3个块的文件,而第二个映射任务实际上不处理任何记录(但从中读取所有数据块2和3的一部分),如果一行在块1中开始并在块3中结束。

希望这有意义

关于hadoop - MapReduce:当2个块分布在不同节点上时,如何进行输入拆分?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17334291/

10-12 03:23