Hadoop Distcp - 增加 distcp.dynamic.max.chunks.tolerable 配置和调整 distcp

标签 hadoop configuration mapreduce distcp

我正在尝试使用 distcp 在两个 hadoop 集群之间移动数据。大量的小文件需要移动大量的数据。为了让它更快,我尝试使用 -strategy dynamic,根据文档,它“允许更快的数据节点比更慢的节点复制更多的字节”。

我将映射器的数量设置为 400。当我启 Action 业时,我看到此错误:java.io.IOException:使用 splitRatio:2、numMaps:400 创建的 block 太多。减少 numMaps 或降低拆分比率以继续。

当我用谷歌搜索时,我找到了这个链接: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 一样传递它来为单个 distcp 作业更新此配置,或者我是否必须在 mapred-site.xml 上更新它?任何帮助将不胜感激。

如果有大量小文件,这种方法是否也适用?我可以使用任何其他参数来使其更快吗?任何帮助将不胜感激。

谢谢。

最佳答案

我想通了。可以使用 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"

关于Hadoop Distcp - 增加 distcp.dynamic.max.chunks.tolerable 配置和调整 distcp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57514628/

相关文章:

hadoop - avro映射的lib中的AvroKey和AvroValue类

hadoop - 在 ambari 集群安装向导中选择公共(public)仓库

java - 提高 spring 库的可扩展配置对象的明确性

java - 在哪里/如何为 Tomcat .war 文件设置配置资源

python - 如何为 AWS 访问 key 和 secret 访问 key 更改 mrjob 中的环境变量

security - 在 HDFS 中创建一次写入文件

hadoop - 如何将 Parquet 文件转换为 Avro 文件?

linux - 用户 Centos 8 Postgresql12 的身份验证失败

hadoop - Hive 上的自定义 Map Reduce 程序,规则是什么?输入和输出如何?

java - EOFException 在 org.apache.hadoop.io.SequenceFile$Reader.init(SequenceFile.java :1508)