我有两个HDFS设置,想要将一些表从HDFS1复制(不迁移或移动)到HDFS2。如何将数据从一个HDFS复制到另一个HDFS?可以通过Sqoop或其他命令行吗?
答案 0 :(得分:26)
DistCp(分布式副本)是一种用于在群集之间复制数据的工具。它使用MapReduce实现其分发,错误处理和恢复以及报告。它将文件和目录列表扩展为映射任务的输入,每个任务都将复制源列表中指定的文件的分区。
用法:$ hadoop distcp <src> <dst>
示例:$ hadoop distcp hdfs://nn1:8020/file1 hdfs://nn2:8020/file2
file1
的 nn1
被复制到nn2
,文件名为file2
Distcp是目前最好的工具。 Sqoop用于将数据从关系数据库复制到HDFS,反之亦然,但不能在HDFS和HDFS之间复制。
更多信息:
有两个版本可用 - distcp2
中的运行时性能与distcp
的运行时性能相比
答案 1 :(得分:13)
Hadoop附带了一个名为distcp
的有用程序,用于并行地向Hadoop文件系统复制大量数据。 distcp的规范用例是用于在两个HDFS集群之间传输数据。
如果集群运行相同版本的hadoop,则hdfs方案适合使用。
$ hadoop distcp hdfs://namenode1/foo hdfs://namenode2/bar
namenode1的/foo
目录中的数据将被复制到namenode2的/ bar目录中。如果/bar
目录不存在,它将创建它。我们也可以提到多个源路径。
与rsync
命令类似,默认情况下,distcp命令将跳过已存在的文件。我们还可以使用-overwrite
选项覆盖目标目录中的现有文件。选项-update
只会更新已更改的文件。
$ hadoop distcp -update hdfs://namenode1/foo hdfs://namenode2/bar/foo
distcp
也可以实现为MapReduce作业,其中复制工作由跨集群并行运行的映射完成。没有减速器。
如果尝试在运行不同版本的两个HDFS群集之间复制数据,则复制将处理失败,因为RPC系统不兼容。在这种情况下,我们需要使用只读的基于HTTP的HFTP文件系统从源读取。这里的工作必须在目标集群上运行。
$ hadoop distcp hftp://namenode1:50070/foo hdfs://namenode2/bar
50070是namenode嵌入式Web服务器的默认端口号。
答案 2 :(得分:6)
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
选项从目标中删除源中不存在的文件或目录。
答案 3 :(得分:1)
尝试dtIngest,它是在Apache Apex平台上开发的。此工具将来自HDFS,共享驱动器,NFS,FTP,Kafka等不同来源的数据复制到不同的目的地。 dtIngest支持将数据从远程HDFS集群复制到本地HDFS集群。 dtIngest运行纱线作业以并行方式复制数据,所以它非常快。它负责故障处理,恢复等,并定期支持轮询目录以进行连续复制。
用法:dtingest [OPTION] ... SOURCEURL ... DESTINATIONURL 示例:dtingest hdfs:// nn1:8020 / source hdfs:// nn2:8020 / dest
答案 4 :(得分:0)
注意您可以使用源群集或目标群集运行基础MapReduce作业也很有用:
hadoop --config /path/to/hadoop/config distcp <src> <dst>
答案 5 :(得分:0)
distcp命令用于从一个群集并行复制到另一群集。您必须设置src的namenode的路径和dst的namenode的路径,在内部它使用mapper。
示例:
$ hadoop distcp <src> <dst>
您可以为distcp设置的选项很少
-m (否)。映射器复制数据,这将提高复制速度。
-atomic 用于自动提交数据。
-更新将仅更新旧版本的数据。
hadoop中有用于复制文件的通用命令-cp和-put,但仅在数据量较小时使用。