HDFS如何附加有效

时间:2012-02-06 15:55:53

标签: hadoop size append block hdfs

假设一个使用默认块大小(128 MB),并且有一个文件使用130 MB;所以使用一个完整大小的块和一个2 MB的块。然后需要将20 MB附加到文件中(总共应该是150 MB)。会发生什么?

HDFS实际上是否将最后一个块的大小从2MB调整为22MB?或者创建一个新块?

如何附加到HDFS中的文件处理conccurency? 是否有数据存储风险?

HDFS是否创建了第三个块,其中包含20 + 2 MB,并删除了2MB的块。如果是的话,这是如何同时工作的?

3 个答案:

答案 0 :(得分:6)

根据latest design document Jira issue中的mentioned before,我们会针对您的问题找到以下答案:

  1. HDFS将追加到最后一个块,创建一个新块并从旧的最后一个块复制数据。这并不难,因为HDFS只使用普通的文件系统将这些块文件写为普通文件。普通文件系统具有附加新数据的机制。当然,如果你填满最后一个块,你将创建一个新块。
  2. 在HDFS中只允许同时写入或附加到任何文件,因此无需处理并发。这由namenode管理。如果您希望其他人开始写文件,您需要关闭文件。
  3. 如果未复制文件中的最后一个块,则追加将失败。将追加写入单个副本,将其传递给副本,类似于正常写入。在我看来,与正常写入相比,没有额外的数据存储风险。

答案 1 :(得分:3)

这是一个非常全面的design document附加内容,它包含并发问题。

当前HDFS docs提供了该文档的链接,因此我们可以假设它是最近的文档。 (文件日期是2009年)

相关的issue

答案 2 :(得分:1)

Hadoop分布式文件系统支持附加到文件,在这种情况下,它应该将20 MB添加到示例中的第二个块(最初为2 MB的块)。这样你就会得到两个块,一个是128 MB,另一个是22 MB。

This是对HDFS附加java文档的引用。