DataNode节点的数据存储器——DataStorage

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

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

DataNode节点的数据存储器——DataStorage_第1张图片

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

DataNode节点的数据存储器——DataStorage_第2张图片

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

你可能感兴趣的:(工作,集群,存储)