2

我正在寻找有效的方法来将目录列表从一个 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 创建一项复制自定义目录列表中所有路径的作业?

4

1 回答 1

0

不确定这是否能解决问题,但我注意到您没有使用“更新”运算符。“-update”运算符只会复制两个文件系统之间的块差异......

于 2014-05-13T16:44:09.480 回答