0

我尝试复制 400+ GB 和一个数据大小为 35.6 GB 的 distcp 作业,但它们都花了将近 2 -3 小时才能完成。

我们在集群中确实有足够的资源。

但是当我检查了容器日志时,我发现复制小文件需要很多时间。有问题的文件是一个小文件。

2019-10-23 14:49:09,546 INFO [main] org.apache.hadoop.tools.mapred.CopyMapper:复制 hdfs://service-namemode-prod-ab/abc/xyz/ava/abc/hello/GRP_part -00001-.snappy.parquet 到 s3a://bucket-name/Data/abc/xyz/ava/abc/hello/GRP_part-00001-.snappy.parquet 2019-10-23 14:49:09,940 信息 [主要] 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

分配的 VCores(累积) - 119T

可用的 VCore - 521T

配置容量 - 997T

使用的HDFS - 813T

使用非 HDFS - 2.7T

任何人都可以提出一个解决这个问题的解决方案,并建议一个最佳的 distcp conf 用于将800 GB - 1 TB文件通常从 HDFS 传输到对象存储。

4

1 回答 1

0

在我的项目中,我们通过 Distcp 将 20TB 复制到了 S3a。这花了将近 24 小时 +。然而,通过添加两个新存储桶并通过相同的 Distcp 命令,复制减少到几乎 16 小时。

另一种选择是增加集群中的 Vcor​​e 数量。

于 2020-06-30T14:34:32.180 回答