我试图复制400+ GB的数据以及35.6 GB的数据量的另一个distcp作业,但是两个文件都花了将近2 -3个小时来完成。
我们的集群中确实有足够的资源。
但是,当我检查了容器日志时,发现复制小文件花费了很多时间。有问题的文件是小文件。
2019-10-23 14:49:09,546 INFO [主要] org.apache.hadoop.tools.mapred.CopyMapper:复制 hdfs://service-namemode-prod-ab/abc/xyz/ava/abc/hello/GRP_part-00001-.snappy.parquet到 s3a://存储桶名称/数据/abc/xyz/ava/abc/hello/GRP_part-00001-.snappy.parquet 2019-10-23 14:49:09,940信息[main] org.apache.hadoop.tools.mapred.RetriableFileCopyCommand:创建临时文件 文件: s3a://bucket-name/Data/.distcp.tmp.attempt_1571566366604_9887_m_000010_0
那么如何使用distcp来改善这一点以使复制更快?
注意:同一群集上的相同数据副本到对象存储(内部存储)而不是AWS S3,但与S3类似,花费了4分钟的时间才达到98.6 GB。
命令:
hadoop distcp -Dmapreduce.task.timeout = 0 -Dfs.s3a.fast.upload = true -Dfs.s3a.fast.buffer.size = 157286400 -Dfs.s3a.multipart.size = 314572800 -Dfs.s3a.multipart.threshold = 1073741824 -Dmapreduce.map.memory.mb = 8192 -Dmapreduce.map.java.opts = -Xmx7290m -Dfs.s3a.max.total.tasks = 1 -Dfs.s3a.threads.max = 10-带宽1024 / abc / xyz / ava / s3a:// bucket-name / Data /
在价值方面有什么可以优化的?
我的集群规格如下,
分配内存(累积)- 1.2T
可用内存- 5.9T
已分配的VCore(累积)- 119T
可用的VCore- 521T
配置的容量- 997T
使用的HDFS- 813T
已使用非HDFS- 2.7T
任何人都可以提出解决此问题的解决方案,并建议一个用于将 800 GB-1 TB 文件通常从HDFS传输到对象存储的最佳distcp conf。
答案 0 :(得分:0)
在我的项目中,我们已通过Distcp将20TB复制到S3a。这几乎花费了24小时+。但是,通过添加两个新的存储桶并通过相同的Distcp命令,复制减少到将近16小时。
另一个选择是增加群集中的Vcore数量。