在向 Amazon S3 上传大量数据时,如何优化性能?

上次更新时间:2018 年 11 月 16 日

我想要上传大量数据到 Amazon Simple Storage Service (Amazon S3),或者要在 S3 存储桶之间复制大量数据。如何优化数据传输的性能?

解决方法

在与 Amazon S3 存储桶之间传输大量数据时,考虑采用以下方法:

使用 AWS 命令行界面 (AWS CLI) 并行上传

注意:如果在运行 AWS CLI 命令时收到错误,请确保您使用的是最新版本的 AWS CLI

为了尽可能缩短传输所需的总时间,可将传输拆分为多个彼此互斥的操作。您可以同时运行 aws s3 cp(复制)、aws s3 mv(移动)或 aws s3 sync(同步)的多个实例。

拆分传输的方法之一是使用 --exclude 和 --include 参数,按文件名分离操作。例如,如果您需要将大量数据从一个存储桶复制到另一个存储桶,并且所有文件名均以数字开头,您可以在 AWS CLI 的两个实例上运行以下命令。

注意:--exclude--include 参数会在客户端处理。因此,本地计算机的资源会影响操作性能。

运行以下命令将复制名称以数字 0 到 4 开头的文件:

aws s3 cp s3://srcbucket/ s3://destbucket/ --recursive --exclude "*" --include "0*" --include "1*" --include "2*" --include "3*" --include "4*"
运行以下命令将复制名称以数字 5 到 9 开头的文件:

aws s3 cp s3://srcbucket/ s3://destbucket/ --recursive --exclude "*" --include "5*" --include "6*" --include "7*" --include "8*" --include "9*"

重要提示:如果您需要传输大量对象(数以亿计),请考虑使用 AWS 开发工具包构建自定义应用程序来执行复制。虽然 AWS CLI 可以执行复制,但在这种规模下,自定义应用程序可能更为高效。

AWS Snowball

在您的本地数据中心和 Amazon S3 之间传输数据,特别是在数据超过 10TB 的情况下,可考虑使用 AWS Snowball

请注意以下限制:

  • AWS Snowball 不支持存储桶之间的数据传输。
  • AWS Snowball 不支持使用 AWS Key Management System (AWS KMS) 管理的密钥执行服务器端加密。有关更多信息,请参阅 AWS Snowball 中的服务器端加密

Amazon EMR 中的 S3DistCp

在 Amazon S3 存储桶之间复制数据时可考虑使用 Amazon EMR 中的 S3DistCp。S3DistCp 支持并行复制大量对象。

重要提示:由于此选项要求您启动 Amazon EMR 集群,因此请务必查看 Amazon EMR 定价


这篇文章对您有帮助吗?


您是否需要账单或技术支持?