项目背景

NameNode是HDFS集群的Master节点,负责存储整个文件系统Inode信息、管理Slave节点及以响应客户端请求。随着数据规模的增长,NameNode的Inode信息存储逐渐成为瓶颈,单机群Inode规模已达5.6亿,严重影响HDFS集群稳定性、性能、扩展性。为此,我们设计开发了NameNode快速垂直拆分方案,旨在降低单NameNode压力,提升HDFS集群可用性。

方案与核心技术

1. NameNode联邦与ViewFS技术

采用社区NameNode联邦技术,部署多个NameNode节点,分别托管不同目录,分担单NameNode的Inode存储压力。对客户端暴露统一的ViewFS文件系统接口,屏蔽内部多NameNode细节,保证对客户端访问的兼容性。

NameNode Federation & ViewFS

2. 分布式快速数据拷贝技术

拆分多NameNode后,需将数据迁移至新NameNode,此过程涉及PB级别数据迁移,传统Distcp拷贝耗时太久,并消耗大量磁盘与网络带宽。为此,我们引入Facebook的FastCopy技术,采用硬链接的方式进行数据拷贝,拷贝耗时大幅缩短,同时不占用磁盘与网络带宽。同时,我们改造FastCopy为分布式版本,进一步提升拷贝效率。

Facebook FastCopy

3. 支持跨NameNode文件移动

HDFS默认不支持跨NameNode的文件移动操作,故拆分多组NameNode后,会导致跨NameNode的文件移动操作失败,尤其对于部分计算引擎,会导致计算任务失败。我们对文件移动进行改造,同NameNode使用原生move操作,跨NameNode使用FastCopy做硬链接拷贝,之后再删除源目录文件,从而解决了这一问题。

4. 全量与增量数据迁移

为缩短HDFS的停服务时间,我们采用了“1次全量+多次增量”的数据迁移策略,从而将停服务升级时间控制在2小时以内。具体流程如下:

  1. 不停服务全量迁移
  2. 不停服务循环增量迁移(目的:将新老NameNode的差距降到最小,从而缩短最后一次停服务增量迁移的耗时)
  3. 老NameNode进SafeMode只读不可写,进行最后一次增量迁移
  4. 新NameNode对外提供服务,老NameNode下线

应用案例

目前,该方案已在公司主要集群成功上线(均为千级别服务器数、亿级别文件数、PB级别容量)。上线后,任务运行正常,单NameNode压力显著下降,HDFS集群可用性显著提升。