HDFS如何附加有效

Dav*_*vid 10 size hadoop append block hdfs

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

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

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

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

Eth*_*anP 6

根据前面提到Jira问题最新设计文档,我们为您的问题找到了以下答案:

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