如何将数据从一个HDFS复制到另一个HDFS?

sha*_*arp 15 hadoop bigdata hdfs sqoop

我有两个HDFS设置,并希望将一些表从HDFS1复制(不迁移或移动)到HDFS2.如何将数据从一个HDFS复制到另一个HDFS?是否可以通过Sqoop或其他命令行?

Avi*_*ddy 27

DistCp(分布式副本)是用于在群集之间复制数据的工具.它使用MapReduce实现其分发,错误处理和恢复以及报告.它将文件和目录列表扩展为映射任务的输入,每个任务都将复制源列表中指定的文件的分区.

用法: $ hadoop distcp <src> <dst>

例: $ hadoop distcp hdfs://nn1:8020/file1 hdfs://nn2:8020/file2

file1from nn1被复制到nn2文件名file2

Distcp是目前最好的工具.Sqoop用于将数据从关系数据库复制到HDFS,反之亦然,但不能在HDFS到HDFS之间复制.

更多信息:

有两个版本可供使用 - 运行时性能distcp2比较高distcp


小智 16

Hadoop附带了一个有用的程序,distcp用于并行地向Hadoop文件系统复制大量数据.distcp的规范用例是用于在两个HDFS集群之间传输数据.如果集群运行相同版本的hadoop,则hdfs方案适合使用.

$ hadoop distcp hdfs://namenode1/foo hdfs://namenode2/bar
Run Code Online (Sandbox Code Playgroud)

/foonamenode1目录中的数据将被复制到namenode2的/ bar目录中.如果该/bar目录不存在,它将创建它.我们也可以提到多个源路径.

rsync命令类似,默认情况下,distcp命令将跳过已存在的文件.我们还可以使用-overwriteoption覆盖目标目录中的现有文件.该选项-update仅更新已更改的文件.

$ hadoop distcp -update hdfs://namenode1/foo hdfs://namenode2/bar/foo
Run Code Online (Sandbox Code Playgroud)

distcp也可以实现为MapReduce作业,其中复制工作由跨集群并行运行的映射完成.没有减速器.

如果尝试在运行不同版本的两个HDFS集群之间复制数据,则复制将处理失败,因为RPC系统不兼容.在这种情况下,我们需要使用只读的基于HTTP的HFTP文件系统从源读取.这里的工作必须在目标集群上运行.

$ hadoop distcp hftp://namenode1:50070/foo hdfs://namenode2/bar
Run Code Online (Sandbox Code Playgroud)

50070是namenode的嵌入式Web服务器的默认端口号.


Sai*_*tam 7

distcp用于并行地将数据复制到hadoop文件系统和从hadoop文件系统复制数据.它类似于通用hadoop fs -cp命令.在后台进程中,distcp实现为MapReduce作业,其中映射器仅用于跨群集并行复制.

用法:

  • 将一个文件复制到另一个

    % hadoop distcp file1 file2

  • 将目录从一个位置复制到另一个位置

    % hadoop distcp dir1 dir2

如果dir2不存在则会创建该文件夹并复制内容.如果dir2已经存在,那么dir1将在其下复制.-overwrite选项强制在同一文件夹中覆盖文件.-update选项仅更新已更改的文件.

  • 在两个HDFS集群之间传输数据

    % hadoop distcp -update -delete hdfs://nn1/dir1 hdfs://nn2/dir2

-delete 选项从目标中删除源中不存在的文件或目录.