HDFS的联邦机制
1.HDFS1.X架构
HDFS1.X架构从逻辑上可以分为两层:命名空间管理层和数据块存储管理层。其中数据块存储管理层又分为数据块管理和存储管理两部分。
Namenode实现了命名空间管理层以及数据块存储管理层中的数据块管理功能,而Datanode则实现了数据块存储管理层中的存储管理部分。
HDFS1.X架构使用一个Namenode来管理文件系统的命名空间以及数据块信息,使得HDFS的实现非常简单,但是单一的Namenode会导致以下缺点:
(1)由于Namenode在内存中保存整个文件系统的元数据,所以Namenode内存的大小直接限制了文件系统的大小。
(2)由于HDFS文件的读写流程都涉及与Namenode交互,所以文件系统的吞吐量受限于单个Namenode的处理能力。
(3)Namenode作为文件系统的中心节点,无法做到数据的有效隔离。
(4)Namenode是集群中的单一故障点,有可用性隐患。
(5)Namenode实现了数据块管理以及命名空间管理功能,造成这两个功能高度耦合,难以让其他服务单独使用数据块存储功能。
2.HDFS联邦机制
为了能够水平扩展Namenode,HDFS2.X提供了Federation架构。Federation架构的HDFS集群可以定义多个Namenode/Namespace,这些Namenode之间相互独立,各自分工管理自己的命名空间。HDFS集群中的Datanode提供数据块的共享存储功能,每个Datanode都会向集群中所有的Namenode注册,且周期性地向所有的Namenode发送心跳和块汇报,然后执行Namenode通过响应发回的Namenode指令。
HDFS Federation引入了两个新概念:
(1)块池
一个块池由属于同一个命名空间的所有数据块组成,这个块池中的数据块可以存储在集群中的所有Datanode上,而每个Datanode都可以存储集群中所有块池的数据块。每个块池独立管理,不与其他块池交互,所以一个Namenode出现故障时,并不会影响集群中的Datanode服务于其他的Namenode。
(2)命名空间卷
一个Namenode管理的命名空间以及它对应的块池一起被称为命名空间卷,当一个Namenode/Namespace被删除后,它对应的块池也会从集群的Datanode上删除。
HDFS Federation架构相较于HDFS 1.X架构有这样的优点:支持Namenode/Namespace的水平扩展性,同时为应用程序和用户提供了命名空间卷级别的隔离性。