Distcp 源长度不匹配



我在两个不同的 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 得到解决。

  1. 检查源文件统计信息,使用命令:

    hdfs fsck hdfs://xxxxxxxxxxx
    
  2. 如果源文件未关闭,请使用以下命令将其关闭:

    hdfs debug recoverLease -path hdfs://xxxxxxx
    
  3. hadoop distcp -bandwidth 15 -m 50 -pb hdfs://xxxxxx hdfs://xxxxxx

最新更新