我正在寻找有效的方法来将目录列表从一个 Hadoop 文件系统同步到另一个具有相同目录结构的文件系统。
例如,假设 HDFS1 是创建数据的官方来源,我们需要每周一次将所有data-2目录下的新创建数据复制到 HDFS2:
**HDFS1**
hdfs://namenode1:port/repo/area-1/data-1
hdfs://namenode1:port/repo/area-1/data-2
hdfs://namenode1:port/repo/area-1/data-3
hdfs://namenode1:port/repo/area-2/data-1
hdfs://namenode1:port/repo/area-2/data-2
hdfs://namenode1:port/repo/area-3/data-1
**HDFS2** (subset of HDFS1 - only data-2)
hdfs://namenode2:port/repo/area-1/dir2
hdfs://namenode2:port/repo/area-2/dir2
在这种情况下,我们有 2 个要同步的目录:
/repo/area-1/data-2
/repo/area-1/data-2
这可以通过以下方式完成:
hadoop distcp hdfs://namenode1:port/repo/area-1/data-2 hdfs://namenode2:port/repo/area-1
hadoop distcp hdfs://namenode1:port/repo/area-2/data-2 hdfs://namenode2:port/repo/area-2
这将运行 2 个 Hadoop 作业,如果目录数量很大,假设 hdfs://namenode1:port/ 下有 500 个不同的非重叠目录 - 这将创建 500 个 Hadoop 作业,这显然是多余的。
有没有办法将自定义目录列表注入 distcp?如何使 distcp 创建一项复制自定义目录列表中所有路径的作业?