2

我在两个不同的hadoop集群之间执行distcp命令时遇到问题,

原因:java.io.IOException:源长度不匹配:hdfs://ip1/xxxxxxxxxx/xxxxxx 和目标: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/ 

但似乎没有任何效果。

请提供任何解决方案。

4

3 回答 3

1

我在完全相同版本的两个 Hadoop 集群之间遇到了相同的 distcp 问题。对我来说,结果是由于其中一个源目录中的某些文件仍处于打开状态。一旦我为每个源目录单独运行 distcp,我就能发现情况就是这样——它对所有打开文件的目录都有效,并且只对那些文件有效。当然,乍一看很难说。

于 2017-01-13T21:27:30.433 回答
0

通过从 cluster1 one 到本地 linux fs 和从 cluster2 执行 copyFromLocal 执行 copyToLocal 解决了该问题。

于 2017-01-29T15:40:41.207 回答
-1
  1. 检查源文件统计信息,使用命令:

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

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

于 2018-03-13T08:28:18.493 回答