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

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

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

注意:作为一项最佳实践,请确保您使用的是最新版本的 AWS CLI。有关更多信息,请参阅安装 AWS 命令行界面

为了尽可能缩短传输所需的总时间,可将传输拆分为多个彼此互斥的操作。您可以同时运行 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 定价


此页面对您有帮助吗? |

返回 AWS Support 知识中心

需要帮助? 请访问 AWS 支持中心

发布时间:2016 年 1 月 7 日

更新时间:2018 年 11 月 16 日