HDFS Federation使用了多个独立的NameNode/Namespace来使HDFS的命名服务能够水平扩展。在HDFS Federation中,NameNode之间是联盟关系,他们之间相互独立且不需要相互协调。HDFS Federation中的NameNode提供了命名空间和块管理功能。
HDFS Federation中的DataNode被所有的NameNode用作公共存储块的地方。每一个DataNode都会向所在集群中所有的NameNode注册,并且会周期性的发送心跳和块信息报告,同时处理来自所有NameNode的指令。
原理
Federation对NameNode的访问主要在客户端实现,Federation中存在多个NameNode命名空间,如何划分和管理这些命名空间非常关键。由于文件有可能被放到不同Namespace中,HDFS需要访问所有Namespace,代价过大。
为了方便管理多个命名空间,HDFS Federation采用了经典的Client Side Mount Table(社区ViewFS功能)。通过客户端侧将应用的不同路径映射到具体的NameService上,从而达成存储分离或者性能分离的场景。如图1所示,下面三个矩形代表三个相互独立的命名空间,上方蓝色的三角形代表从客户角度去访问的命名空间(即ViewFS)。各个矩形的命名空间Mount到蓝色的表中,客户可以访问不同的挂载点来访问不同的命名空间,类似在Linux系统中访问不同挂载点一样。这就是HDFS Federation中命名空间管理的基本原理:将各个命名空间挂载到全局mount-table中,就可以将数据进行全局共享。同样的命名空间挂载到统一的mount-table中,这就成为应用程序可见的命名空间视图。