前言
在HDFS内,我们通常听到的最频繁的2个名词术语:副本(Replica)和块(Block).几乎可以这么说,HDFS所有涉及到文件的操作都与这两个词相关。但是大家可能对这2个概念的理解还仅仅停留在一个比较浅的层面:比如说就是一个单一的replica或是一个单一的block块。尤其是在对块的层面,一个block块在最终完成后,它会经历哪些状态过程呢?这些细节的内容就是本文所准备阐述的。
副本/块的状态
在了解副本、块在文件的写入过程中的状态变化情况之前,我们需要对它们所有可能存在的状态做一个全面的了解。
副本状态
副本的所有潜在状态可以在DataNode的数据存放目录中进行查找。在BP打头的目录下,继续往里寻找,你应该会发现一些诸如rbw、finalized、tmp这些名称的目录。不要以为这些目录名称看起来没什么特别的,其实这与副本当前所处状态是息息相关的。
下面是一个副本所有可能处于的状态:
- 1.finalized.finalized的意思是确定好了的状态,表明此副本是已经写好的完整的副本块,这种状态的副本是HDFS内最多的,放置于finalized目录下。
- 2.rbw.rbw的全称是Replica being written to,表示正在被写入的副本块。所以下次如果在DataNode的数据存储目录中看到rbw下面的文件时,就明白这些块是正在被写入的副本块了。
- 3.rwr.rwr的全称是Replica waiting to be recovered,表示的意思是等待被恢复的块。这种情况发生于DataNode突然挂掉并重启时,之前正在写的块即rbw下的块会变为rwr状态的块。因为在DataNode恢复服务之后,会涉及到租约失效,恢复操作等等。
- 4.rur.rur的名称为Replica under recovery,表示正在恢复中的副本。这个状态是紧跟着rwr状态的。
- 5.temporary.temporary表示的是一种临时状态。当一个副本因为没有达到规定副本系数,而发生副本块的复制或集群进行数据平衡时,这些过程中产生的副本块就处于temporary状态,位于tmp目录下。当这些副本块完全写入完毕,则会从tmp目录转到finalized目录下。当DataNode在这个时候重启的时候,tmp目录下的副本块会被删除。
块的状态
与副本类似,一个block同样有多种状态,主要有以下几种:
- 1.Un