近年来,已经有越来越多的企业参与到Hadoop社区的发展中来,它们对HDFS的改造提出了不同的方案,有的是基于社区版HDFS源码进行改造,比如Cloudera的CDH版本和Facebook的AvatarNode,也有的是参照HDFS重写一套分布式文件系统,比如百度的HDFS2和腾讯的XFS,当然社区也推出了新的版本Hadoop0.23。总的来看,Hadoop 0.23的Federation HDFS、百度的HDFS2和腾讯的XFS做了较为全面的改造,而ClouderaCDH4 beta1、Facebook的AvatarNode以及Hadoop 0.23 HA是为了解决特定问题——Namenode单点故障而做的。
首先,我们来介绍Hadoop0.23中Federation HDFS的架构,如下图所示。从逻辑上看,FederationHDFS中命名空间和文件块管理还是由Namenode负责,Datanode负责文件块物理存储和访问,但是FederationHDFS允许在一个集群中运行多个Namenode,每个Namenode负责一个命名空间(可以是非HDFS的命名空间),每个命名空间拥有至少一个逻辑的BlockPool,命名空间和它所拥有的BlockPool统称为一个NamespaceVolume。虽然这些命名空间从物理上看是共享集群中的Datanode,但是在每个Datanode上还是对每个命名空间的BlockPool进行了隔离的,而且Datanode需要向每个相关的Namenode进行汇报。采用FederationHDFS架构,集群失去了统一的命名空间管理,换来的是多个命名空间可自主升级的灵活性和降低集群整体不可用的风险。