正如我们所知,Hadoop 集群的元数据信息存放在NameNode 的内存中,当集群扩大到一定的规模之后,NameNode 内存中存放的元数据信息可能会非常大。由于HDFS 的所有操作都会和NameNode 进行交互,当集群很大时,NameNode 就会成为集群的瓶颈。为了解决该问题,Hadoop2.x 引入了Federation 机制。
Federation 优势:
HDFS 集群拓展性:多个NameNode 分管一部分目录,使得一个集群可以拓展到多个节点,不像Hadoop 1.0 中由于内存的限制而制约文件存储数目。
高效性能:多个NameNode 管理不同的数据,且同时对外提供服务,将为用户提供更高的读写吞吐率。
良好的隔离性:用户可以根据需要将不同业务数据交给不同的NameNode 管理,这样可以减小不同业务之间的影响。
HDFS 数据管理架构
HDFS 的数据存储采取分层的架构。所有的关于存储数据的信息和管理都放在NameNode,而真实的数据存放在各个DataNode之下。隶属于同一个NameNode所管理的数据都在同一个namespace下,而一个namespace 对应一个Block Pool。Block Pool 是同一个namespace 下面的block 的集合。这是常见的单个namespace的情况,即一个NameNode 需要管理集群中所有的元数据信息。随着元数据空间的不断增大,集群的性能会越来越低。
Federation 架构
针对NameNode内存过高的问题,可以将大的文件目录转移到另外一个NameNode 上进行管理。同时,保证这些NameNode 共享集群中的所有DataNode。
HDFS Federation 是解决NameNode 单点问题的水平横向拓展方案,可以得到多个独立的NameNode和名字空间,从而使得HDFS 的命名服务能够水平扩张。
HDFS Federation 中的NameNode 相互独立地管理自己的名字空间,这时候在DataNode 上就不仅仅存储一个Block Pool 下的数据,而是多个Block Pool 的数据,在HDFS Federation机制下,只有元数据的管理和存放被分隔开,而真实数据的存储还是共用的。