Hadoop Distcp-在不同位置之间复制时出现小文件问题

时间:2019-10-24 06:40:02

标签: hadoop amazon-s3 hdfs distcp persistent-object-store

我试图复制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。

1 个答案:

答案 0 :(得分:0)

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

另一个选择是增加群集中的Vcore数量。