假设其中一个使用默认的块大小(128 MB),并且有一个文件使用130 MB;因此请使用一个完整大小的块和一个2 MB的块。然后,需要将20 MB附加到文件中(现在总共应该为150 MB)。怎么了?

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

在HDFS中附加到文件如何处理并发性?
有数据丢失的风险吗?

HDFS是否创建第三个块,将20 + 2 MB放入其中,然后删除2MB的块。如果是,请问如何同时进行?

最佳答案

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

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

    10-16 02:34