s3-dist-cp 预期性能

0

【以下的问题经过翻译处理】 我正在尝试评估s3-dist-cp工具是否有助于以下用例:我有数百万个小文本文件(每个文件大小为几十KB),存储在S3存储桶中,在对其进行更多处理前需要将它们合并成更大的文件并使用Spark处理。 为了测试s3-dist-cp,我首先在一个较小的存储桶上进行了尝试,其中包含约550,000个文件(总共大小约为6.8GB)。我启动了一个带有15个核心节点(m6g.xlarge实例类型,4个VCPUs/16GB RAM)的EMR集群,并使用以下命令运行了该工具:

s3-dist-cp --src s3://mybucket/data/ --dest hdfs:///my_data --outputCodec=gz --targetSize=128 --groupBy='.*(celery-task-meta).*'

这需要1小时38分钟才能完成,这种持续时间是否正常?我能做些什么来加速它?

profile picture
专家
已提问 5 个月前27 查看次数
1 回答
0

【以下的回答经过翻译处理】 s3-dist-cp使用Hadoop Map Reduce完成复制任务。在读写S3时,它会使用EMRFS来进行GET/PUT/LIST调用以访问S3。

因此,若要调整作业运行时的性能,有以下必要:

  • 你需要了解Hadoop的工作原理以及它如何与YARN集成。
  • 还可以调整文件系统(S3和HDFS)以提高读取、写入和列出性能。

必须进行基准测试以真正了解此集群大小需要1小时38分钟的正常时间。

你可以使用YARN资源管理器UI和MR作业历史服务器日志来监视Mapreduce作业,以确定花费大量时间的位置。

  • 是否有处于等待YARN分配资源挂起状态的容器(映射器或减速器)?Mapper/Reducers是否遇到内存问题?在这种情况下,你需要更大的集群或调整Map Reduce的内存设置
  • s3-dist-cp是否在运行映射器/减速器之前花费了太多时间来列出S3对象?增加s3-dist-cp客户端堆空间使其能够处理源S3存储桶上许多S3对象的列表。export HADOOP_OPTS="-Xmx5000m -verbose:gc -XX:+UseMembar -XX:+PrintGCDetails -Xloggc:/tmp/gc.log"; s3-dist-cp --src s3://bucket/object/ --dest s3://dest-bucket/object/

要提高对S3的性能,可以使用“fs.s3.*”参数来更改EMRFS的行为。 一些可能需要调整的参数包括: fs.s3 要提高S3的性能,可以使用“fs.s3.*“参数来改变EMRFS行为。有些调优的参数可以考虑:fs.s3.maxConnections fs.s3.maxRetries。请注意,一些EMRFS参数可能不存在或没有公开记录。例如如何修改EMRFS的Listing行为等。

因此,您可以尝试在您的s3-dist-cp命令中使用s3a://前缀,这将调用s3a文件系统(这是开源Hadoop的一部分)而不是EMRFS,例如s3-dist-cp --src s3a://mybucket/data / --dest hdfs:///my_data --outputCodec=gz --targetSize=128 --groupBy='.(celery-task-meta).'

S3A文件系统参数在本文中有很好的文档和解释: https://hadoop.apache.org/docs/stable/hadoop-aws/tools/hadoop-aws/performance.html这允许额外调整文件系统相关参数,以加快您的作业。

此外,如果需要,可以考虑HDFS写性能调优,但是我们很少看到HDFS的性能问题。

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则