HDFS Federation Balance是一个用于在不同联邦命名空间之间平衡数据的工具。它使用DistCp将数据从源路径复制到目标路径。首先在源路径创建快照并提交初始distcp,然后使用distcp diff进行增量复制直到源和目标一致。如果在RBF模式下工作,它会更新Router中的挂载表。最后将源数据移至回收站。
本文档旨在描述HDFS联邦平衡的使用和设计。
hdfs联邦平衡工具支持普通联邦集群和基于路由器的联邦集群。以rbf为例,假设我们在路由器中有一个挂载条目:
Source Destination /foo/src hdfs://namespace-0/foo/src
以下命令运行一个hdfs联邦平衡作业。第一个参数是挂载条目。第二个参数是目标路径,必须包含目标集群。
bash$ /bin/hadoop rbfbalance -router submit /foo/src hdfs://namespace-1/foo/dst
它将数据从hdfs://namespace-0/foo/src增量复制到hdfs://namespace-1/foo/dst,并最终将挂载条目更新为:
Source Destination /foo/src hdfs://namespace-1/foo/dst
如果hadoop shell进程意外退出,我们可以使用以下命令继续未完成的任务:
bash$ /bin/hadoop rbfbalance continue
这将扫描日志以查找所有未完成的任务,恢复并继续执行它们。
如果我们想在普通的联邦集群中实现负载均衡,请使用以下命令。
bash$ /bin/hadoop fedbalance submit hdfs://namespace-0/foo/src hdfs://namespace-1/foo/dst
在普通联邦模式下,源路径必须包含路径模式。
hdfs federation balance工具有两种模式:
命令 rbfbalance 在基于路由器的联邦模式下运行。命令 fedbalance 在普通联邦模式下运行。
在rbf模式下,第一个参数被视为挂载点。通过将挂载点设置为只读来禁用写入。
在常规联邦模式下,第一个参数被视为源的完整路径。第一个参数必须包含源集群。它会通过取消源路径的所有权限来禁用写入。
有关禁用写入的详细信息,请参阅HDFS FedBalance。
命令 submit 有以下选项:
| 选项键 | 描述 | 默认值 |
|---|---|---|
| -forceCloseOpen | 在DIFF_DISTCP阶段没有差异时强制关闭所有已打开的文件。 | 等待直到没有打开的文件。 |
| -map | 用于复制的最大并发映射数。 | 10 |
| -bandwidth | 指定每个map任务的带宽(单位:MB)。 | 10 |
| -delay | 指定作业需要重试时的延迟时长(毫秒)。 | 1000 |
| -moveToTrash | This options has 3 values: trash (move the source path to trash), delete (delete the source path directly) and skip (skip both trash and deletion). By default the server side trash interval is used. If the trash is disabled in the server side, the default trash interval 60 minutes is used. |
trash |
| -diffThreshold | 指定增量复制阶段使用的差异条目阈值。如果差异条目大小不超过该阈值且满足打开文件检查条件(无打开文件或强制关闭所有打开文件),fedBalance将进入distcp的最终轮次。设置为0表示等待直到没有差异为止。 | 0 |
在hdfs-fedbalance-site.xml中设置配置选项。
| 配置键 | 描述 | 默认值 |
|---|---|---|
| hdfs.fedbalance.procedure.work.thread.num | BalanceProcedureScheduler的工作线程数。BalanceProcedureScheduler负责调度平衡作业,包括提交、运行、延迟和恢复。 | 10 |
| hdfs.fedbalance.procedure.scheduler.journal.uri | 日志的URI地址,该日志文件用于处理作业持久化和恢复。 | hdfs://localhost:8020/tmp/procedure |
HDFS Federation Balance的组件可以分为以下几类:
平衡程序调度器实现了一个状态机。它负责调度平衡作业,包括提交、运行、延迟和恢复。模型如下所示:

HDFS FedBalance 是作为状态机的一个任务实现的。所有的 distcp 平衡逻辑都在这里实现。一个 HDFS FedBalance 任务包含 3 个步骤:
DistCpProcedure: 这是第一个流程。它负责处理所有的数据复制工作。包含6个阶段:
-diff参数逐轮提交distcp以同步源路径和目标路径。如果设置了-forceCloseOpen参数,当源路径和目标路径之间没有差异时,此阶段将完成。否则,只有当没有差异且没有打开的文件时,此阶段才会完成。MountTableProcedure: 该过程用于更新Router中的挂载表条目。会取消只读属性并更新挂载点的目标地址。此过程仅在基于路由器的联邦模式下激活。
TrashProcedure: 该过程将源路径移动到回收站。
所有3个流程完成后,平衡作业即完成。