我在两个不同的 hadoop 集群之间执行 distcp 命令时遇到问题,
引起:java.io.IOException:长度不匹配 来源:hdfs:// ip1 / xxxxxxxxxx / xxxxx和 目标:HDFS://nameservice1/xxxxxx/.distcp.tmp.attempt_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/
但似乎没有任何效果。
请解决任何问题。
答案 0 :(得分:1)
我在完全相同版本的两个Hadoop集群之间遇到了与distcp相同的问题。对我来说,结果是由于其中一个源目录中的某些文件仍处于打开状态。一旦我为每个源目录分别运行distcp,我就能找到这种情况 - 除了带有打开文件的一个目录以外,它只适用于那些文件。当然,乍一看很难说清楚。
答案 1 :(得分:0)
通过将clusterToLocal从cluster1 one执行到本地linux fs并将copyFromLocal执行到cluster2来解决该问题。
答案 2 :(得分:-1)
检查源文件统计信息,使用命令:
hdfs fsck hdfs://xxxxxxxxxxx
如果源文件未关闭,请使用此命令将其关闭:
hdfs debug recoverLease -path hdfs://xxxxxxx
hadoop distcp -bandwidth 15 -m 50 -pb hdfs://xxxxxx hdfs://xxxxxx