背景

HDFS有两个主要层:
Namespace
包含目录,文件和块
它支持所有命名空间相关的文件系统操作,如创建,删除,修改和列出文件和目录。
Block Storage Service
有两部分
以前的HDFS架构只允许整个集群的单个命名空间。一个Namenode管理这个命名空间。HDFS Federation通过向HDFS文件系统添加支持多个Namenodes 命名空间来解决先前架构的限制。
通过处理注册和周期性心脏跳动来提供数据库集群成员资格。
处理块报告并维护块的位置。
支持块相关操作,如创建,删除,修改和获取块位置。
管理复制块下的块的复制放置和复制,并删除过度复制的块。
块管理(在Namenode中完成)
存储 - 由数据库提供,通过在本地文件系统上存储块,并允许读/写访问。
Hadoop的集群模式
在前面的文章中《Namenode详解及运维实践》提到过了namenode的基于QJM的集群HA模式,也就是集群里面部署主备两个namenode节点,形成高可用。不过这种模式的高可用,依然只有一个是active状态,备节点处于等待接入的状态。这种模式的缺陷也是可预测的,datanode是横向可扩展的,但是namenode却是不可扩展的,当datanode达到一定量时,namenode就可能存在性能瓶颈超负荷运转了。
而Hadoop 2.0以后开启了Federation模式,Federation联邦模式将整个HA集群再划分为两个以上的集群,不同的集群之间通过Federation进行连接,不同集群间可以共享数据节点,也可以不共享,实现了NameService的横向扩展,避免了单台的性能瓶颈。
多个Namenodes
为了水平扩展name service,Federation使用多套独立的Namenodes。Namenodes是独立的,不需要相互协调。所有的Namenodes都使用datanodes作为块的公共存储。每个datanode注册到Federation集群中的所有Namenodes。Datanodes发送定期的心跳和块报告并处理来自Namenodes的命令。
用户可以使用ViewFs创建个性化的命名空间视图,其中ViewFs类似于某些Unix Linux系统中的client side mount tables。

总结一下这个图:
多个NN共用一个集群里DN上的存储资源,每个NN都可以单独对外提供服务
每个NN都会定义一个存储池,有相同的id,每个DN都为所有存储池提供存储
DN会按照存储池id向其对应的NN汇报块信息,同时,DN会向所有NN汇报本地存储可用资源情况
如果需要在客户端方便的访问若干个NN上的资源,可以使用客户端挂载表ViewFs,把不同的目录映射到不同的NN,但NN上必须存在相应的目录
概 念 解 释
Block Pool
Block Pool是属于单个命名空间的一组块。Datanodes存储集群中所有Block Pool的块。它独立于其他Block Pool进行管理。即每个namenode负责存储和管理一个block pool的元数据,一个Namenode的故障不会阻止数据库在群集中服务其他的Namenode。
namespace及其Block Pool一起称为Namespace Volume,这是一个独立的管理单位。当Namenode被删除时,数据节点处的相应Block Pool被删除。在集群升级期间,每个Namespace Volume都将作为一个单元进行升级。
ClusterID
标识符ClusterID标识集群中的所有节点。格式化Namenode时,该标识符可以指定或自动生成。应该保证集群的所有Namenode的ClusterID保持相同。
Name Service
Hadoop 2.0里对NN进行了一层抽象,提供服务的不再是NN本身,而是Name Service。Federation是由多个NS组成的,每个NS又是由一个或两个(HA)NN组成的。
主要优点
Namespace可扩展性 - HDFS集群存储水平扩展,但Namespace不会。使用大量小文件的大型部署或部署可以通过向集群添加更多的Namenodes来扩展Namespace
性能 - 文件系统操作吞吐量受到先前架构中单个Namenode的限制。向集群添加更多的Namenodes可以缩放文件系统的读/写操作吞吐量。
隔离 - 单个Namenode在多用户环境中不提供隔离。一个实验数据是,应用程序可以overload Namenode并减缓生产关键应用程序。使用多个Namenodes,则可以将不同类别的应用程序和用户隔离到不同的Namespace。
Federation 配置
联合配置向后兼容,并允许现有的单个Namenode配置工作,无任何变化。新配置被设计为使得集群中的所有节点具有相同的配置,而不需要根据集群中节点的类型部署不同的配置。
称为NameServiceID的新抽象与联合添加。Namenode及其对应的辅助/备份/检查指针节点属于此。为了支持单一配置文件,Namenode和secondary / backup / checkpointer配置参数后缀为NameServiceID,并添加到同一配置文件中。
框架
基于以上理论,整理一个大概的框架,可以用于测试实践,具体部署步骤在下一篇给出

参考资料
http://hadoop.apache.org/docs/r2.5.2/hadoop-project-dist/hadoop-hdfs/Federation.html
http://blog.csdn.net/qqpy789/article/details/50072879
http://www.jianshu.com/p/c3a834e45ae3 hadoop 生态圈介绍




