如何使Hadoop Distcp复制自定义文件夹列表?

时间:2013-11-01 07:47:18

标签: hadoop mapreduce hdfs distributed-computing

我正在寻找一种有效的方法来将目录列表从一个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作业,这显然是过度杀伤。< / em>的

有没有办法将自定义目录列表注入distcp? 如何使distcp创建一个作业复制自定义目录列表中的所有路径?

1 个答案:

答案 0 :(得分:0)

不确定这是否能解决问题,但我注意到您还没有使用&#34;更新&#34;运营商。 &#34; -update&#34; operator只会复制两个文件系统之间块的差异......