将大量数据上传到 Amazon S3 时如何优化性能?

1 分钟阅读
0

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

解决方法

使用以下方法之一将大量数据传输到 Amazon 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 SDK 构建自定义应用程序来执行复制。尽管 AWS CLI 可以执行复制,但在此规模下,自定义应用程序可能会更高效。

AWS Snowball

考虑使用 AWS Snowball 在您的本地数据中心和 Amazon S3 之间进行传输,尤其是在数据超过 10 TB 时。

请注意以下限制:

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

带有 Amazon EMR 的 S3DistCp

考虑使用带有 Amazon EMR 的 S3DistCp 跨 Amazon S3 存储桶复制数据。S3DistCp 支持并行复制大量对象。

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

相关信息

请求速率和性能指南

AWS 官方
AWS 官方已更新 5 个月前