【问题标题】:Speeding up S3 to GCS transfer using GCE and gsutil使用 GCE 和 gsutil 加速 S3 到 GCS 的传输
【发布时间】:2013-06-07 23:54:11
【问题描述】:

我计划使用 GCE 集群和 gsutil 将大约 50Tb 的数据从 Amazon S3 传输到 GCS。到目前为止,我有一个很好的方法可以将负载分配到我必须使用的许多实例上,但是与我在本地集群中实现的相比,我的传输速率相当慢。以下是我正在做的事情的详细信息

实例类型: n1-highcpu-8-d

图片: debian-6-squeeze

工作期间的典型负载平均值: 26.43、23.15、21.15

70gb 测试的平均传输速度(单个实例): ~21mbps

平均文件大小: ~300mb

.boto 进程数: 8

.boto 线程数: 10

我一次对大约 400 个 s3 文件调用 gsutil:

gsutil -m cp -InL manifest.txt gs://my_bucket 

我需要一些关于如何在每个实例上加快传输速度的建议。对于 n1-highcpu-8-d 实例是否是最佳选择,我也不是 100%。我正在考虑可能自己使用 python 并行化这项工作,但我认为调整 gsutil 设置可以产生良好的结果。非常感谢任何建议

【问题讨论】:

    标签: amazon-s3 google-cloud-storage google-compute-engine


    【解决方案1】:

    如果您看到每个对象 21Mbps 并且一次运行大约 20 个对象,那么您从一台机器获得大约 420Mbps 的吞吐量。另一方面,如果您看到的总速度为 21Mbps,则表明您可能在路径上的某个地方受到了相当严重的限制。

    我建议您可能希望使用多个较小的实例将请求分散到多个 IP 地址;例如,使用 4 个 n1-standard-2 实例可能会产生比一个 n1-standard-8 更好的总吞吐量。为此,您需要拆分文件以跨机器传输。

    我还想知道,根据您的 cmets,您一次保持打开多少流。在我见过的大多数测试中,当您达到 8-16 个流时,您会从额外的线程/流中获得递减的回报,并且通常单个流的速度至少比具有分块的多个流快 60-80% .

    您可能想要调查的另一件事是您看到的下载/上传速度;将数据复制到本地磁盘然后重新上传,您可以单独测量下载和上传速度,如果 gsutil 由于等待写入而阻塞从一个管道读取,则使用本地磁盘作为缓冲区可能会加快整个过程给另一个。

    您没有提到的另一件事是您在哪个区域运行。我假设您在美国地区之一而不是欧盟地区运行,并从亚马逊的 us-east S3 位置下载。

    【讨论】:

    • 我一开始就考虑在多个实例上运行它,所以我认为我会听从您的建议,让每个实例更小/更便宜,因为它们可能每花费一美元就能实现更多收益。由于时间限制以及当前性能下传输的总体成本较低,我可能不会对实例的上传/下载速度进行深入调查,但我将研究我使用的 GCE 机器的区域。您知道如何找到要上传到的 GS 区域吗?
    • 对不起,我错过了这个回复;您可以在创建存储桶时选择Google Cloud Storage存储桶所在的位置:developers.google.com/storage/docs/…您可以使用命令找到现有存储桶的位置:gsutil ls -L -b gs://my-bucket/
    【解决方案2】:

    在您的 boto 配置(通常为 ~/.boto)文件中使用 parallel_thread_count 和 parallel_process_count 值。

    您可以通过键入以下内容获取有关 -m 选项的更多信息:

    gsutil 帮助选项

    【讨论】:

      猜你喜欢
      • 2019-04-28
      • 2017-11-06
      • 1970-01-01
      • 2014-09-05
      • 2018-04-04
      • 2018-06-14
      • 2018-12-18
      • 2020-12-10
      • 1970-01-01
      相关资源
      最近更新 更多