我正在寻找一种有效的方法来将目录列表从一个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创建一个作业复制自定义目录列表中的所有路径?
答案 0 :(得分:0)
不确定这是否能解决问题,但我注意到您还没有使用&#34;更新&#34;运营商。 &#34; -update&#34; operator只会复制两个文件系统之间块的差异......