我将上传大量数据到 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 SDK 构建自定义应用程序来执行复制。虽然 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 定价。
相关信息
请求速率和性能指南