我在两个不同的 hadoop 集群之间执行 distcp 命令时遇到问题,
原因:java.io.IOException:长度不匹配 来源:HDFS://IP1/xxxxx target:hdfs://nameservice1/xxxxxxx/.distcp.tmp.try_1483200922993_0056_m_000011_2
我尝试使用 -pb 和 -skipcrccheck:
hadoop distcp -pb -skipcrccheck -update hdfs://ip1/xxxxxxxxxx/xxxxx hdfs:///xxxxxxxxxxxx/
hadoop distcp -pb hdfs://ip1/xxxxxxxxxx/xxxxx hdfs:///xxxxxxxxxxxx/
hadoop distcp -skipcrccheck -update hdfs://ip1/xxxxxxxxxx/xxxxx hdfs:///xxxxxxxxxxxx/
但似乎没有任何效果。
请提供任何解决方案。
我在两个完全相同版本的Hadoop集群之间遇到了同样的distcp问题。对我来说,事实证明这是由于其中一个源目录中的某些文件仍然打开。一旦我为每个源目录单独运行 distcp,我就能够发现情况确实如此 - 它适用于所有目录,除了一个带有打开文件的目录并且仅适用于这些文件。当然,乍一看很难看出来。
此问题已通过将 copyToLocal 从 cluster1 执行 one(一)到本地 linux fs 和 copyFromLocal 到 cluster2 得到解决。
-
检查源文件统计信息,使用命令:
hdfs fsck hdfs://xxxxxxxxxxx
-
如果源文件未关闭,请使用以下命令将其关闭:
hdfs debug recoverLease -path hdfs://xxxxxxx
-
hadoop distcp -bandwidth 15 -m 50 -pb hdfs://xxxxxx hdfs://xxxxxx