【问题标题】:AWS S3 Sync very slow when copying to large directories复制到大型目录时,AWS S3 Sync 非常慢
【发布时间】:2017-06-09 17:44:07
【问题描述】:

使用 AWS-CLI 将数据同步到 S3 中的空目录时,几乎是即时的。但是,当同步到一个大目录(数百万个文件夹)时,甚至需要很长时间才能开始上传/同步文件。

还有其他方法吗?看起来它正在尝试在同步之前考虑 S3 目录中的所有文件 - 我不需要,并且在不事先检查的情况下上传数据就可以了。

【问题讨论】:

  • 这听起来像是预期的行为。
  • 将 100mb 同步到新目录几乎不需要时间,但同步到频繁使用的目录可能需要数小时 - 希望有替代方案!
  • 一种适用于我的替代方案 rclone (rclone.org)。我没有做准确的基准测试,但是 aws cli sync 花了几个小时才找到 >5000 个必须同步的文件中的 30 个。 rclone 在几分钟内完成了同样的工作。
  • @PhilipKirkbride:我不明白为什么。除非 OP 使用--delete,否则唯一要考虑/列出的文件是本地文件。
  • @PhilipKirkbride:我的意思是,对我来说,这是出乎意料的,因为:1. 这显然是可以避免和次优的,2. 通常awscli 是实施良好且快速。换句话说,我不反对 aws s3 sync 的当前实现在这种情况下很慢这一事实,但我对此感到惊讶。你让它听起来像是合乎逻辑的,其实不然。

标签: amazon-web-services amazon-s3 aws-cli bigdata


【解决方案1】:

sync命令需要枚举bucket中的所有文件,判断bucket中是否已经存在本地文件,是否与本地文件相同。存储桶中的文档越多,所需的时间就越长。

如果您不需要这种 sync 行为,只需使用递归复制命令,例如:

aws s3 cp --recursive . s3://mybucket/

这应该将当前目录中的所有本地文件复制到 S3 中的存储桶中。

【讨论】:

  • 危险!使用aws s3 cp 最终可能会很昂贵,因为如果您多次运行此副本,您将一遍又一遍地上传文件。更好的解决方案可能是继续使用aws s3 sync,但增加max-concurrent-requests 设置:docs.aws.amazon.com/cli/latest/topic/…
【解决方案2】:

如果您使用来自 S3 Tools 的非官方 s3cmd,您可以在使用 sync 的同时使用 --no-check-md5 选项来禁用 MD5 总和比较以显着加快处理速度。

--no-check-md5        Do not check MD5 sums when comparing files for [sync].
                        Only size will be compared. May significantly speed up
                        transfer but may also miss some changed files.

来源:https://s3tools.org/usage

示例:s3cmd --no-check-md5 sync /directory/to/sync s3://mys3bucket/

【讨论】:

  • aws s3 sync --no-check-md5 ... s3://... 返回错误:未知选项:--no-check-md5
  • 文档说“你需要 s3cmd 2.0 或更高版本”。检查您的版本。
  • s3cmds3tools.org/s3cmd 的工具,aws 是 AWS 自己的 awscli。 aws s3 sync --size-only 可以帮助大同步。
猜你喜欢
  • 2023-02-13
  • 2016-05-16
  • 2018-08-02
  • 2020-12-22
  • 1970-01-01
  • 2020-06-19
  • 2021-12-17
  • 1970-01-01
  • 2018-07-13
相关资源
最近更新 更多