Federation即为“联邦”,该特性允许一个HDFS集群中存在多个NameNode同时对外提供服务,这些NameNode分管一部分目录(水平切分),彼此之间相互隔离,但共享底层的DataNode存储资源。
单namenode架构的局限性
1.NameSpace(命名空间的限制)
由于Namenode再内存中存储所有的元数据(metadata),因此单个Namenode所能存储的对象(文件+块)数目收到Namenode所在JVM的heap(堆) size的限制。
2.性能的瓶颈
由于是单个Namenode的HDFS架构,因此整个HDFS文件系统的吞吐量受限于单个NameNode的吞吐量。
3.隔离问题
由于HDFS仅有一个Namenode,无法隔离各个程序,因此HDFS上的一个实验程序很可能影响整个HDFS上运行的程序。
4.集群的可用性
在只有一个Namenode的HDFS中,此Namenode的宕机无疑会导致整个集群的不可用。(低可用性)
为什么纵向扩展目前的NameNode不可行?
比如将NameNode的Heap空间扩大到512GB。
1.启动问题,启动花费时间太长。(Hadoop 1.x具有50GB Heap Namenode的HDFS启动一次大概需要30分钟到2小时)
2.Namenode在Full GC时,如果发生错误将会导致整个集群宕机。
3.对大JVM Heap进行调试比较困难。优化Namenode的内存使用性价比比较低。
hadoop2.x
增加了Federation的概念
为什么要引入Federation
1.采用Federation的最主要的原因是简单,Federation能够快速的解决大部分单Namenode的问题。
2.Federation是简单鲁棒的设计,由于联邦中各个Namenode之间是相互独立的。Federation整个核心设实现大概用了3.5个月。大部分改变是在Datanode、Config和Tools,而Namenode本身的改动非常少,这样Namenode的原先的鲁棒性不会受到影响。比分布式的Namenode简单,虽然这种事先的扩展性比起真正的分布式的Namenode要小些,但是可以迅速满足需求。
3.Federation良好的向后兼容性,已有的单Namenode的部署配置不需要任何改变就可以继续工作。
Federation的主要优点
1.namespace是一个可扩展的,相当于namenode是一个分布式的。
2.性能提升了,操作不会由于一个namenode的吞吐量收到限制。
3.隔离性。每个namenode只管理一部分文件 。不同用户可以被namespace隔离。