前面的博客介绍了HDFS HA的实现方式,HA主要解决了"单点故障"的问题,但是在系统扩展性、整体性能和隔离性方面仍然存在问题。
(1) 系统扩展性方面,元数据存储在NN内存中,会受到NN内存上限的制约。
(2) 整体性能方面,吞吐量受单个NN的影响。
(3) 隔离性方面,一个程序可能会影响其他运行的程序,如一个程序消耗过多资源导致其他程序无法顺利运行。HDFS HA本质上还是单名称节点。
HDFS联邦可以很好的解决以上三个方面问题。
在HDFS联邦中,设计了多个相互独立的NN,使得HDFS的命名服务能够水平扩展,这些NN分别进行各自命名空间和块的管理,不需要彼此协调。每个DN要向集群中所有的NN注册,并周期性的发送心跳信息和块信息,报告自己的状态。
HDFS联邦拥有多个独立的命名空间,其中,每一个命名空间管理属于自己的一组块,这些属于同一个命名空间的块组成一个“块池”。每个DN会为多个块池提供块的存储,块池中的各个块实际上是存储在不同DN中的。
官网介绍:
NameNode在内存中保存文件系统中每个文件和每个数据块的引用关系,这意味着对于一个拥有大量文件的超大集群来说,内存将成为限制系统横向扩展的瓶颈,在2版本中引入的联邦HDFS允许通过添加Nam