Hadoop 带append的HDFS是如何工作的

Hadoop 带append的HDFS是如何工作的,hadoop,size,append,block,hdfs,Hadoop,Size,Append,Block,Hdfs,假设有一个使用默认块大小(128MB),有一个文件使用130MB;所以使用一个全尺寸块和一个2MB块。然后需要将20MB追加到文件中(现在总共应该是150MB)。会发生什么 HDFS是否将最后一个块的大小从2MB调整到22MB?还是创建一个新块 在HDFS中附加到文件如何处理并发性? 是否存在数据丢失的风险 HDFS是否创建第三个块将20+2MB放入其中,并删除2MB的块。如果是,这是如何并行工作的?Hadoop分布式文件系统支持附加到文件,在这种情况下,它应该将20 MB添加到示例中的第二个块

假设有一个使用默认块大小(128MB),有一个文件使用130MB;所以使用一个全尺寸块和一个2MB块。然后需要将20MB追加到文件中(现在总共应该是150MB)。会发生什么

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

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


HDFS是否创建第三个块将20+2MB放入其中,并删除2MB的块。如果是,这是如何并行工作的?

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


是对用于HDFS的append java文档的参考。

这里是一个关于append的非常全面的文档,它包含并发性问题

Current提供了指向该文档的链接,因此我们可以假设它是最近的一个。(文件日期为2009年)

以及相关的。

根据中的,我们可以找到您问题的以下答案:

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

  • 我知道这条路是不变的。但是由于块只写一次,我可以想象HDFS会创建第三个块,将20+2MB放入其中,然后删除2MB的块。但这是如何并行工作的呢?你能附加到一个关闭的文件吗?如果你对一个文件调用append,你就是在打开它。无法对打开的文件调用append。然后,一旦调用append并获得输出流,您就可以开始将字节转储到文件的末尾。如果我没记错引入此功能的时间,您需要打开一个新创建的文件,以便能够“附加”到它(也称为非真正的附加)。你是说现在HDFS允许1)创建一个文件2)关闭它3)重新打开它4)向它添加数据?是的。因为当您重新打开它时,您会询问名称节点最后一个块是什么,然后您就可以开始写入它了。