前言
最近几天,Hadoop官方社区发布了2.9.0版本,这也是第一个2.9开头的小版本。相比较于之前的2.8版本,2.9版本中新增了不少新功能特性。其中关于HDFS模块的一个重要功能是HDFS Router Federation(基于路由的Federation)。有人可能好奇,这个功能与目前HDFS支持的federation功能有什么区别呢?一句话简单的来讲,就是之前federation是通过多namespace的方式,然后通过viewFs的方式在客户端维护一份挂载表,然后在逻辑上是同一个集群地址。这里笔者特意点出了客户端这3个字,因为是在客户端做路由分析,所以对于用户来说很不方便使用和维护,一旦未来映射关系需要做更改的时候。相比于老federation+ViewFS的方式,Router Federation则是在HDFS内部增加了软件层来帮我们做请求路由。本文笔者就来简单聊聊这个软件层的路由是怎么实现的。
Router Federation软件层结构
想较于ViewFs通过在客户端维护挂载表信息,Router Federation是真正做到了对客户端的完全透明。因为这部分映射信息将会被额外的保存下来,还会持久化出去。这个模块我们姑且称之为状态维护(State Maintenance)的模块。另外还有一个重要的部分是请求转发模块,这里我们称之为Request forward。
以上2个模块构成了HDFS新的Federation软件层的设计。在这层软件结构以下,就是各个子集群。每个子集群会与Federation软件层,进行信息交互。结构图如下: