1

我计划使用 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 设置可以产生良好的结果。任何意见是极大的赞赏

4

2 回答 2

2

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

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

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

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

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

于 2013-06-08T16:56:42.737 回答
0

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

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

gsutil 帮助选项

于 2013-06-08T16:55:21.877 回答