我需要将大量文件(数量级为数十tb)从Amazon S3移动到Google Cloud Storage。S3中的文件都在500mb以下。
到目前为止,我已经尝试使用gsutil cp与并行选项(-m)直接使用S3作为源和GS作为目标。即使调整多处理和多线程参数,我也无法实现超过30mb/s的性能。
我现在的想法:
-
使用distcp从S3批量加载数据到hdfs,然后找到一种方法将所有数据分割到google存储(据我所知不支持),或者:
-
设置一个hadoop集群,每个节点运行一个gsutil cp并行作业,S3和GS作为src和dst
如果支持第一个选项,我将非常感谢如何做到这一点的详细信息。然而,看来我得找出怎么做第二件事了。我不确定如何使用这种方法,因为我需要跟踪许多节点上的gsutil可恢复传输特性,而且我通常没有运行这种hadoop作业的经验。
任何关于如何追求这些途径之一(或更简单的东西,我还没有想到)的帮助将不胜感激。
您可以设置一个Google Compute Engine (GCE)帐户,并从GCE运行gsutil来导入数据。您可以启动多个GCE实例,每个实例导入数据的一个子集。这是我们在Google I/O 2013上所做的名为"将大型数据集导入谷歌云存储"的演讲中所涉及的技术之一。
如果使用这种方法,您将需要做的另一件事是使用gsutil cp -L
和-n
选项。-L
创建了一个清单,记录了关于传输内容的详细信息,-n
允许您避免重新复制已经复制的文件(以防您从头开始重新启动副本,例如,在中断之后)。我建议你升级到gsutil 3.30版本(它将在下周左右发布),它改进了-L
选项在这种复制场景中的工作方式。
Mike Schwartz, Google Cloud Storage团队
Google最近发布了云存储传输服务,旨在将大量数据从S3传输到GCS:https://cloud.google.com/storage/transfer/getting-started
(我意识到这个答案对于最初的问题来说有点晚了,但它可能对将来的访问者有帮助)