实现输入拆分(HADOOP)



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

区块1

_______________

这是第一行。

这是第二行。

这是第三行。

这是第四行。

这是线路

区块2

_________________

五。

这是第六行。

这是第七行。

这是第八行。

这是第九行。

这是第十行。

我知道Input Splits的概念,以及它是如何成为逻辑边界而不是物理边界的,但我从未见过它的实现。当然,我读过一些文章,描述了哪些方法应该被重写等等。但我的第一个疑问仍然是,这种划分真的像这里一半那里的记录一样可能吗?

如果是的话,对它的实施有什么想法吗?

这里有很好的解释。

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

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

最新更新