我的问题是我有一个文本文件,其中有100个单词,中间用空格隔开,我需要执行一个单词计数程序。
因此,当我的名称节点将文件拆分为HDFS块时,如何确保仅在单词的末尾进行拆分?
即,如果我在文本文件中将第50个单词作为Hadoop,将其拆分为64MB的块时,当前块的存储可能会在Hadoop单词的中心达到64MB,因此一个块包含“had”和其他块中的另一个“oop”。
抱歉,这个问题听起来很傻,但是请提供答案。谢谢。
最佳答案
您对此的答案是inputsplit。
由于HDFS不知道文件的内容。将数据存储到多个块中时,每个块的最后一条记录可能会被破坏。记录的第一部分可能在一个块中,而同一记录的最后部分可能在其他块中。
为了解决块中的这类问题,MapReduce使用了输入拆分的概念。
“块”不过是跨多个数据节点分布的大小为128MB的物理数据分区,而“输入拆分”是数据的逻辑分区。
在运行MapReduce程序时,映射器的数量取决于输入拆分的数量,而在处理输入拆分时,将包含包含损坏记录的下一个块的位置。
上图显示了三个HDFS块,第1块数据的最后一部分存储在第2块中。在这种情况下,输入拆分将获取Block-2的位置以检索损坏的记录。
hadoopchannel
关于hadoop - Hadoop Mapreduce HDFS块拆分,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46949331/