Amazon s3 使用GCE和gsutil加速S3到GCS的传输

Amazon s3 使用GCE和gsutil加速S3到GCS的传输,amazon-s3,google-cloud-storage,google-compute-engine,Amazon S3,Google Cloud Storage,Google Compute Engine,我计划使用GCE集群和gsutil将约50Tb的数据从AmazonS3传输到GCS。到目前为止,我有一个很好的方法来分配负载,不管我需要使用多少实例,但是与我使用本地集群所获得的传输速率相比,我的传输速率非常慢。下面是我正在做的事情的细节 实例类型:n1-highcpu-8-d 图像:debian-6-Squence 作业期间的典型平均负荷:26.43,23.15,21.15 70gb测试的平均传输速度(对于单个实例):~21mbps 平均文件大小:~300mb .boto进程计数:8 .bot

我计划使用GCE集群和gsutil将约50Tb的数据从AmazonS3传输到GCS。到目前为止,我有一个很好的方法来分配负载,不管我需要使用多少实例,但是与我使用本地集群所获得的传输速率相比,我的传输速率非常慢。下面是我正在做的事情的细节

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

图像:debian-6-Squence

作业期间的典型平均负荷:26.43,23.15,21.15

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

平均文件大小:~300mb

.boto进程计数:8

.boto线程数:10

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

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

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

在boto配置文件(通常为~/.boto)中使用并行线程计数和并行进程计数值

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


gsutil帮助选项

如果您看到每个对象的吞吐量为21Mbps,并且一次运行大约20个对象,那么一台机器的吞吐量大约为420Mbps。另一方面,如果你看到的是21Mbps的总速率,这意味着你可能在这条路径的某个地方受到了相当大的限制

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

我还想知道,根据你的评论,你一次打开了多少条流。在我所看到的大多数测试中,当您达到8-16个流时,额外线程/流的回报会逐渐减少,通常单个流的速度至少是使用分块的多个流的60-80%

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


还有一件事你没有提到,那就是你在哪个区域跑步。我假设您在美国某个地区而不是欧盟地区运行,并从Amazon的美国东部S3位置下载。

我首先考虑在多个实例上运行它,因此,我认为我会采纳你的建议,使每一个实例都更小/更便宜,因为每花一美元,它们可能会获得更多的收益。由于时间限制和当前性能传输的总体成本较低,我可能不会深入调查实例的上/下载速度,但我会调查我使用的GCE机器的区域。你知道我怎样才能找到我要上传到的GS区域吗?对不起,我错过了这个回复;您可以在创建存储桶时选择Google云存储存储桶的位置:您可以通过以下命令找到现有存储桶的位置:
gsutil ls-L-b gs://my bucket/