我的问题是我有一个100个单词的文本文件,用空格分隔,我需要做一个单词计数程序。
因此,当我的名称节点将文件拆分为HDFS块时,我们怎样才能确保拆分仅在单词的末尾完成?
也就是说,如果我在文本文件中将第50个单词作为Hadoop,那么当将其分成64MB块时,当前块的存储可能会在单词Hadoop的中心达到64MB,因此一个块包含&# 39;有'而另一个' oop'在其他一些街区。
对不起,如果问题听起来很愚蠢,请提供答案。谢谢。
答案 0 :(得分:1)
你对此的回答是inputsplit。
由于HDFS不知道文件的内容。在将数据存储到多个块时,每个块的最后一条记录可能会被破坏。记录的第一部分可能在一个块中,同一记录的最后一部分可能在其他块中。
要解决块中的这类问题,MapReduce使用Input Splits的概念。
'Block'只是分布在多个数据节点上的大小为128MB的数据的物理划分,而'Input Split'是数据的逻辑划分。
在运行MapReduce程序时,映射器的数量取决于输入拆分的数量,而处理输入拆分包括包含损坏记录的下一个块的位置。
上图显示有三个HDFS块,Block-1数据的最后一部分存储在Block-2中。在这种情况下,输入拆分将获得Block-2的位置以检索损坏的记录。