背景
在HDFS集群的元数据量达到1亿以上时,需要面临如何开源节流的问题。开源就是搭建多个集群分散NN的RPC压力,节流就是小文件进行合并或者文件的生命周期管理。
这里主要是阐述如何进行HDFS Federation落地。加入1对新的NN(暂且命名dp02)和原有集群dp01组成federation模式,共享所有的DN存储。
目标
此文档主要阐述以下2个要点:
1)dp02加入组成federation的依赖构建操作及注意要点
2)dp02的数据存储使用规划
下面是针对上述2点的具体方案。
dp02的federation模式构建要点
因为federation模式下的DN是完全共享的,所以这里我们只要考虑新NN的加入即可,步骤如下:
1)寻找2台配置与现有dp01的NN一致的节点,下面是构建操作
1.1).进行格式化操作,注意这里一定要用指定clusterId的format命令格式,clusterId值从dp01的NN页面查看所得。
1.2).打通DN到dp02的映射,在所有DN以及client机器上的hdfs-site.xml里加入dp02的nameservice相关配置。
2)格式化完毕后,鉴于数据存储率不同,可先选择使用率稍微低点的dp01下的DN加入到dp02下,后续再将dp01的所属DN纳入到dp02中。
dp02的数据存储使用规划
假设上述步骤完成,而且dp02下已经有一定数量规模的DN加入。我们就可以将一些数据的计算和存储搬到dp02上了,把dp02独立NN的处理能力利用上,同时在数据本地性上,因为还是老的那些DN节点,不会有很多跨机房的网络传输。
目前想到的一个dp02的使用场景,将临时库的数据移到dp02的命名空间中进行存储计算。
注意:对临时库的写出地址发生变更时,需要在client针对临时库的写出地址中指明dp02的命名空间地址。
业务迁移
完成dp02的建设,主要是需要分担dp01的压力,需要将一些rpc高的业务迁移到dp02。通过查询audit log里面拿到高RPC的表,进行迁移工作。
未来工作
HDFS Federation 可以有效的环节NN的RPC压力,不过也有一个比较大的缺点,就是相对来讲需要客户端知道具体的物理地址,或者需要客户端来做ViewFS比较重的部署。Hadoop 3可以切换到RBF(Router Based Federation)在HDFS服务端增加软件层来做请求路由。