我正在寻找一种有效的方法,将目录列表从一个hadoop文件系统同步到另一个具有相同目录结构的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
在本例中,我们有两个目录要同步:
/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作业,如果目录的数量很大,那么假设有500个不同的非重叠目录hdfs://namenode1:port/-这将创建500个hadoop作业,这显然是一种过度杀伤力。
有没有办法将自定义目录列表注入到distcp中?如何使distcp创建一个作业复制自定义目录列表中的所有路径?
1条答案
按热度按时间gwbalxhn1#
不确定这是否解决了问题,但我注意到您没有使用“update”操作符。“-update”操作符将只复制两个文件系统之间的块差异。。。