在最新的Hadoop版本中又实现了基于Router的联盟架构,并且在这个架构之上还实现了许多增强集群管理能力的特性。Router将挂载表从客户端中抽离了出来,解决了ViewFS存在的问题。
视频讲解如下:
为了对用户屏蔽联盟的实现细节,将ViewFS的配置和实现从客户端中剥离出来,一个自然的想法引入新的代理服务,客户端直接请求代理服务,再由其解析ViewFS后将请求转发给正确的子集群。这个代理服务叫做Router。RBF主要包括两个模块:Router和State Store,基于RBF(Router-Based Federation)的联盟架构如下图示。
一、Router
在HDFS中Router可以有多个且Router之间相互独立。如果一个Router不可用不会影响其他Router提供服务。Router主要提供以下的功能特性:
- 联盟的接口
向客户端提供了一个全局的NameNode接口,负责接收客户端请求。根据挂载表中的信息查找正确的子集群,并转发请求到对应子集群Active NameNode。在收到Active NameNode的响应结果之后,将结果返回给客户端。为了提升性能,Router可以缓存远程挂载表条目和子集群的状态。
- NameNode信息的维护
Router定期检查一个NameNode的状态和向StateStore报告其高可用性状态和负载空间状态。为了提高NameNode的性能,Router使用State Store中的高可用性状态信息,以将请求转发到最有可能处于活动状态的NameNode。一个Router可以检测多个NameNode。
Router还实现可用性和容错性。Router可以独立于HDFS集群部署并且是无状态的,可以放在负载均衡器后面使用。Router还实现了其他的接口,比如:RPC、routerAdmin、WebUI、WebHDFS、JMX。
二、State Store
State Store有两种存储方式:本地存储和Zookeeper。它主要维护两种信息:Membership和挂载表(Mount Table)。Membership用于记录子集群的状态,比如总容量、DataNode数量、NameNode的HA状态,Router的状态等;挂载表保存了路径到子集群的映射关系。