单一NameNode造成的缺点:
(1)由于Namenode在内存中保存整个文件系统的元数据,所以Namenode内存的大小直接限制了文件系统的大小。
(2)由于HDFS文件的读写流程都涉及与Namenode交互,所以文件系统的吞吐量受限于单个Namenode的处理能力。
(3)Namenode作为文件系统的中心节点,无法做到数据的有效隔离。
(4)Namenode是集群中的单一故障点,有可用性隐患。
HDFS联邦
为了能够水平拓展NameNode,HDFS2.X提供了Federation架构,可以定义多个NameNode/NameSpace。这些NameNode之间相互独立,各自分工管理自己命名空间。HDFS集群中的Datanode提供数据块的共享存储功能,每个Datanode都会向集群中所有的Namenode注册,且周期性地向所有的Namenode发送心跳和块汇报,然后执行Namenode通过响应发回的Namenode指令
HDFS Federation引入了两个新概念:
- 多个NN共用一个集群的DN资源,每个NN可以单独对外提供服务。
- 每个NN都会定义一个Block pool(块池),有单独的id,每个DN会为所有的块池提供存储。
- DN会按照块池id向对应的NN汇报块信息,同时DN会向所有的块池汇报资源可以信息。
- 如果需要在客户端方便的访问若干个NN上的资源,可以使用客户端挂载表,把不同的目录映射到不同的NN,但NN上必须存在相应的目录。