DataNode节点的数据存储器

对于每一个DataNode节点而言,它都需要本地文件系统来存储与自己相关的数据。在前面的文章中我已经说过,任何节点都可以配置多个本地存储路径,每一个存储路径又被HDFS抽象成了一个StorageDirectory对象,但为了DataNode节点对自己存储路径的方便,HDFS又为每一个DataNode节点设计了一个DataStorage对象,DataNode节点可以利用这个对象对自己的所有存储路径进行统一的管理。所以,在本文我将主要介绍DataStorage是如何为DataNode工作的。

首先来看看与DataStorage相关的类。

DataNode节点的数据存储器

在上面的类图中,NamespaceInfo用来表示整个HDFS集群中命名空间的版本号,这个版本号在NameNode节点格式化时生成,DataNode每一次启动向NameNode节点注册时都会获取到这个命名空间的版本号,如果DataNode是第一次启动,则会持久保存这个版本号;否则,它会用自己第一次启动获取的版本号与这个版本号进行比较,如果不匹配则终止启动。前面说过,StorageDirectory向上提供了粗粒度的事务性操纵,从上面的类图中不难看出,对StorageDirectory的事务性操作都是由DataStorage完成的。另一方面,DataStorage主要在DataNode节点启动时扮演重要的角色,所以接下来我将具体谈谈这一点。

DataNode节点的数据存储器


       在DataNode节点启动的时候,DataStorage所做的事情其实也很简单。首先,我们在启动DataNode节点的时候会给它指定若干个本地存储路径,那么DataStorage就能对每一个存储路径构造成一个StorageDirectory,然后分析每一个存储路径当前的状态,对处于非正常状态的存储路径进行相应的操作(关于如何分析存储路径的状态和相应的恢复操作我在博文HDFS中的数据存储路径——StorageDirectory中已详细分析过(见  ));当所有的存储路径处于正确的状态之后,就要对每一个存储路径进行用户启动节点时的指定操作(备份/升级/回滚/恢复/提交;最后,如果所有的存储路径操作成功之后,就需要更新每一个存储路径下的版本信息,及对应的VERSION文件(关于VERSION文件,我在前面阐述StorageDirectory时也有讲过)。
        在这里我需要强调的是,DataStorage只是对DataNode的存储路径进行管理,并没有对存储路径中的具体数据文件进行管理,而关于DataNode是如何对它的单个数据文件进行管理的,不是本文要讨论的内容。

linux

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/pszxz.html