实现输入拆分(HADOOP)

时间:2017-02-09 11:26:46

标签: hadoop hadoop2

谈论大数据,说我们有一个非常大的文件(以GB为单位)说,我们知道 HDFS 以分布式方式存储文件,这些文件是块状的,考虑到块大小为 128 MB ,是否有可能某些块会像这样:

第1座

_______________

这是第一行。

这是第二行。

这是第三行。

这是第四行。

这是行

第2座

_________________

5

这是第六行。

这是第七行。

这是第8行。

这是第九行。

这是第十行。

我知道输入拆分的概念以及它是一个逻辑边界而不是物理边界,但我从未见过它的实现。当然我已经阅读了描述应该覆盖哪些方法等的文章。但我的第一个疑问仍然是这个分区真的可能像半个记录在这里和那里一半?

如果有任何关于其实施的想法吗?

2 个答案:

答案 0 :(得分:1)

这里有很好的解释。

https://hadoopi.wordpress.com/2013/05/27/understand-recordreader-inputsplit/

还在这里

https://github.com/apache/hadoop/blob/trunk/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java/org/apache/hadoop/mapred/LineRecordReader.java#L243

答案 1 :(得分:1)

当达到块大小并且它创建下一个块时,可能出现这种情况。 您可以通过将块大小设置为4 kb来模拟这种情况并将您的内容移动到DFS。在那里你可以看到最后一行在两个街区之间分裂。 而这本身就是输入分裂的一个很好的例子。当进程发生时,控件也将访问块2以获取块1中未完成行的未决数据。当块中的最后一个记录不完整时,输入分割包括下一个块的位置信息和字节偏移完成记录所需的数据。

相关问题