《CDP企业数据云平台从入门到实践》——HDFS 迁移到 CDP(1) https://developer.aliyun.com/article/1227815?groupCode=ClouderaCDP
二、 使用 Distcp 迁移 HDFS 数据
DistCp(分布式副本)是用于大型集群间/集群内复制的工具。它使用 MapReduce来影响其分布、错误处理和恢复以及报告。它将文件和目录列表扩展为映射任务的输入,每个任务都将复制源列表中指定的文件的一个分区。
1. Distcp 基本用法
DistCp 最常见的调用是集群间复制:
bash$hadoopdistcphdfs://nn1:8020/foo/bar \hdfs://nn2:8020/bar/foo
这会将 nn1 上/foo/bar 下的命名空间扩展为一个临时文件,将其内容分区到一组映射任务中,并在从 nn1 到 nn2 的每个 NodeManager 上启动一个副本。还可以在命令行中指定多个源目录:
bash$hadoopdistcphdfs://nn1:8020/foo/a \hdfs://nn1:8020/foo/b \hdfs://nn2:8020/bar/foo
或者,等效地,从使用-f 选项的文件:
bash$hadoopdistcp-fhdfs://nn1:8020/srclist \hdfs://nn2:8020/bar/foo
srclist 包含的地方:
hdfs://nn1:8020/foo/ahdfs://nn1:8020/foo/b
当从多个源复制时,如果两个源发生冲突,DistCp 将中止复制并显示一条错误消息,但目的地的冲突是根据指定的选项解决的。默认情况下,将跳过目标中已存在的文件(即不被源文件替换)。
在每个作业结束时报告跳过的文件计数,但如果复印机对其文件的某些子集失败,但在以后的尝试中成功,则可能不准确。重要的是每个 NodeManager 都可以访问源文件系统和目标文件系统并与之通信。对于 HDFS,源和目标都必须运行相同版本的协议或使用向后兼容的协议;请参阅[版本之间复制](#Copying_Between_Versions_of_HDFS)。
复制后,建议生成并交叉检查源和目标列表,以验证复制是否真正成功。由于 DistCp同时使用 Map/Reduce 和 FileSystem API,因此三者中的任何一个或两者之间的问题都可能对副本产生不利和无声的影响。有些人在启用-update 的情况下成功运行以执行第二遍,但用户在尝试此操作之前应该熟悉其语义。
还值得注意的是,如果另一个客户端仍在写入源文件,则复制可能会失败。尝试覆盖正在目标位置写入的文件在 HDFS 上也应该失败。如果源文件在复制之前被(重新)移动,则复制将失败并出现 FileNotFoundException。
有关 DistCp 中所有可用选项的信息,请参阅详细的命令行参考。
• 集群间的复制:主要是做不同集群间数据目录的一些复制,把源到目标通过
DistCP 来去做。
• 更新和覆盖:
-update 用于从源中复制目标中不存在或与目标版本不同的文件。
-overwrite 覆盖目标中存在的目标文件。
• 支持同步:
-diff 选项将文件从源集群同步到具有快照差异的目标集群。它复制、重命名和删除快照差异列表中的文件。使用-diff 选项时必须包含-update 选项。
《CDP企业数据云平台从入门到实践》——HDFS 迁移到 CDP(3) https://developer.aliyun.com/article/1227811?groupCode=ClouderaCDP