前言
在目前单一大HDFS集群越来越无法支撑我们的业务场景时,越来越多的公司开始考虑采用HDFS federation方案来做。这里就自然会衍生出一个问题:新federation出来的Namespace,我如何将数据从原集群(NameNode)同步出来呢?而且在这个过程中,还会有每天增量数据的写入在老集群内。假若只是静态的数据,我们启动一个distcp任务就可以做这部分跨namespace的数据的同步了,但是有了增量数据这个影响因素,这个事情就稍微会变得复杂一点了。最近Hadoop社区在做关于这块的实现和讨论,也实现了一个初始的HDFS federation间的balance工具。本文来聊聊此工具内部的实现细节,相信这个工具在我们实际的生成环境下还是十分有用处的。
粗粒度的federation Balance方案
关于federation Balance的使用场景,主要来源于下面两种情况:
- 纯粹为了平衡各个federation NN上的数据,防止一个集群下的数据量过多进而出现性能瓶颈问题,这种情况在已经使用多集群管理方案下(HDFS RBF或者ViewFs)是比较常见的,
- 新增federation namespace时,从原有的namespace下拆离出数据到新的namespace,这时我们也有着方面的数据同步的需求。
关于上面提到的第二点,笔者在之前写过一篇基于initial distcp + 多次snapshot diff ditcp的方案,不过那套方案执行起来比较的粗粒度,还不是特别的完善,需要额外大量的手工重复的命令的执行。与此粗粒度fed