将大量数据从一个 Amazon S3 桶传输到另一个桶的最佳方法是什么?

2 分钟阅读
0

我想将大量数据(1 TB 或更多)从一个 Amazon Simple Storage Service(Amazon S3)桶传输到另一个桶。

简短描述

根据您的应用场景,您可以使用以下选项在桶之间进行数据传输:

  • 使用 AWS CLI 进行并行上传
  • 使用 AWS SDK
  • 使用跨区域复制或同区域复制
  • 使用 Amazon S3 批量操作
  • 将 S3DistCp 与 Amazon EMR 配合使用
  • 使用 AWS DataSync

解决方法

使用 AWS CLI 进行并行上传

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

若要缩短传输时间,请使用多线程。将传输拆分为多个互斥的操作。例如,使用 AWS CLI 运行 aws s3 cpaws s3 mvaws s3 sync 的多个并行实例。当您为 AWS CLI 的每个实例使用 --exclude 和 --include 参数时,您可以创建更多上传线程。这些参数按文件名筛选操作。

注意:****--exclude--include 参数在客户端处理。这意味着本地计算机上的资源可能会影响操作的性能。

例如,要将大量数据从一个桶复制到另一个桶,请运行以下命令。请注意,文件名以数字开头。

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

aws s3 cp s3://source-awsexamplebucket/ s3://destination-awsexamplebucket/ --recursive --exclude "*" --include "0*" --include "1*" --include "2*" --include "3*" --include "4*"

然后,在第二个 AWS CLI 实例上运行以下命令,复制名称以数字 5 到 9 开头的文件:

aws s3 cp s3://source-awsexamplebucket/ s3://destination-awsexamplebucket/ --recursive --exclude "*" --include "5*" --include "6*" --include "7*" --include "8*" --include "9*"

如果您想加快数据传输速度,请自定义以下 AWS CLI 配置

  • **multipart_chunksize:**此值设置 AWS CLI 在分段上传中为单个文件上传的每个分段的大小。此设置允许您将一个较大的文件(例如 300 MB)拆分为若干个较小的块,以加快上传速度。
    注意: 分段上传要求一个文件在拆分上传时其拆分后的块不能超过 10000 个。验证您所设置的区块大小平衡了块文件大小和块的数量。
  • **max_concurrent_requests:**此值用于设置一次可发送到 Amazon S3 的请求数量。默认值为 10,但可将其增加到更高值。验证您的计算机有足够的资源来支持所需的最大并发请求数。

使用 AWS SDK

使用 AWS SDK 构建可为大量对象执行数据传输的自定义应用程序。根据您的应用场景,在传输数亿个对象时,自定义应用程序可能比 AWS CLI 更高效。

使用跨区域复制或同区域复制

在源桶上设置跨区域复制(CRR)或同区域复制(SRR)。这使 Amazon S3 能够自动将新对象从源桶复制到目标桶。若要筛选 Amazon S3 复制的对象,请使用前缀或标签。有关配置复制和指定筛选条件的更多信息,请参阅复制配置

配置复制后,只有新对象会被复制到目标桶。现有对象不会被复制到目标桶。有关更多信息,请参阅使用 S3 批量复制来复制现有对象

使用 Amazon S3 批量操作

您可以使用 Amazon S3 批量操作通过单个请求复制多个对象。创建批量操作作业时,可以使用 Amazon S3 清单报告来指定要对哪些对象执行操作。或者,您可以使用 CSV 清单文件来指定批处理作业。然后,Amazon S3 批量操作会调用 API 来执行操作。

批量操作任务完成后,您将收到一则通知和有关该作业的完成报告(可选)。

将 S3DistCp 与 Amazon EMR 配合使用

Amazon EMR 上的 S3DistCp 操作可以跨 Amazon S3 桶并行复制大量对象。S3DistCp 首先将文件从源桶复制到 Amazon EMR 集群中的 Worker 节点。然后,该操作将文件从 Worker 节点写入目标桶。有关使用 S3DistCp 的更多指导,请参阅在 Amazon EMR 上使用 S3DistCp 在 HDFS 和 Amazon S3 之间高效移动数据的七个技巧

**重要说明:**由于此选项要求您使用 Amazon EMR,因此请务必查看 Amazon EMR 定价

使用 AWS DataSync

若要将大量数据从一个 Amazon S3 桶移动到另一个桶,请执行以下步骤:

  1. 打开 AWS DataSync 控制台
  2. 创建任务
  3. 为 Amazon S3 创建新位置
  4. 选择您的 S3 桶作为源位置。
  5. 更新源位置配置设置。务必指定访问源 S3 桶的 AWS Identity Access Management(IAM)角色。
  6. 选择您的 S3 桶作为目标位置。
  7. 更新目标位置配置设置。务必指定访问 S3 目标桶的 IAM 角色。
  8. 为您的任务配置设置
  9. 查看配置详细信息。
  10. 选择创建任务
  11. 开始您的任务

**重要说明:**使用 AWS DataSync 时,会产生额外费用。若要预览任何 DataSync 费用,请查看 DataSync 定价结构和 DataSync 限制

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