我正在尝试使用distcp
在两个hadoop集群之间移动数据。有大量的小文件需要移动大量的数据。为了让它更快,我尝试使用-strategy dynamic
,根据文档,它“允许较快的数据节点比较慢的节点复制更多的字节”。
我将映射器的数量设置为400。当我启动作业时,我看到这个错误:java.io.IOException: Too many chunks created with splitRatio:2, numMaps:400. Reduce numMaps or decrease split-ratio to proceed.
当我在谷歌上搜索它时,我找到了这个链接:https://issues.apache.org/jira/browse/MAPREDUCE-5402在这个链接中,作者要求提供一个我们可以增加distcp.dynamic.max.chunks.tolerable
来解决问题的功能。
工单上说这个问题已经在2.5.0
版本中解决了。我使用的hadoop版本是2.7.3
。所以我相信我应该有可能增加distcp.dynamic.max.chunks.tolerable
的价值。
然而,我不确定我如何才能增加它。可以通过像-Dmapreduce.job.queuename
一样传递来更新单个mapred-site.xml
作业的此配置吗?还是必须在distcp上更新它?任何帮助都将不胜感激。
另外,如果有大量的小文件,这种方法能很好地工作吗?还有没有其他参数可以让它更快呢?任何帮助都将不胜感激。
谢谢。
发布于 2019-08-17 00:10:59
我能够弄明白这一点。可以使用distcp命令传递参数,而不必更新mapred-site.xml:
hadoop distcp -Ddistcp.dynamic.recordsPerChunk=50 -Ddistcp.dynamic.max.chunks.tolerable=10000 -skipcrccheck -m 400 -prbugc -update -strategy dynamic "hdfs://source" "hdfs://target"
https://stackoverflow.com/questions/57514628
复制相似问题