将数据从Google云端存储导出到Amazon S3

时间:2016-09-05 11:25:24

标签: amazon-s3 google-bigquery google-cloud-storage

我想将数据从BigQuery中的表传输到Redshift中的另一个表。 我计划的数据流如下:

BigQuery - > Google云端存储 - >亚马逊S3 - >红移

我了解Google云存储转移服务,但我不确定它是否可以帮助我。来自Google Cloud文档:

  

云存储转移服务

     

此页面介绍了您可以使用的云存储传输服务   快速将在线数据导入Google云端存储。

我了解此服务可用于将数据导入Google云端存储,而不是从中导出。

我是否可以将数据从Google云端存储导出到Amazon S3?

6 个答案:

答案 0 :(得分:13)

您可以使用gsutil将数据从Google云存储存储桶复制到亚马逊存储桶,使用如下命令:

gsutil -m rsync -rd gs://your-gcs-bucket s3://your-s3-bucket

请注意,上面的-d选项将导致gsutil rsync从S3存储桶中删除GCS存储桶中不存在的对象(除了添加新对象)。如果您只想将GCS中的新对象添加到S3存储桶,则可以不使用该选项。

答案 1 :(得分:1)

使用Rclone(https://rclone.org/)。

Rclone是一个命令行程序,用于同步文件和目录

Google Drive
Amazon S3
Openstack Swift / Rackspace cloud files / Memset Memstore
Dropbox
Google Cloud Storage
Amazon Drive
Microsoft OneDrive
Hubic
Backblaze B2
Yandex Disk
SFTP
The local filesystem

答案 2 :(得分:1)

我需要将2TB数据从Google Cloud Storage存储桶传输到Amazon S3存储桶。 为此,我创建了Google Compute Engine的V8CPU(30 GB)。

允许在Compute Engine上使用SSH登录。 登录后,创建并清空.boto configuration文件以添加AWS凭证信息。通过从提到的链接获取参考来添加AWS凭证。

然后运行命令:

  

gsutil -m rsync -rd gs:// your-gcs-bucket s3:// your-s3-bucket

数据传输速率为〜1GB / s。

希望此帮助。 (不要忘记在完成工作后终止计算实例)

答案 3 :(得分:1)

转到GCP中的任何实例或云外壳

首先在GCP中配置您的AWS凭证

aws configure

如果无法识别已安装的AWS CLI,请遵循本指南https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html

按照此URL进行AWS配置 https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html

附加我的屏幕截图

enter image description here

然后使用gsutil

gsutil -m rsync -rd gs://storagename s3://bucketname

enter image description here enter image description here

几分钟内即可传输16GB数据

答案 4 :(得分:0)

使用 gsutil 工具,我们可以执行广泛的存储桶和对象管理任务,包括:

  1. 创建和删除存储桶。
  2. 上传、下载和删除对象。
  3. 列出存储桶和对象。移动、复制和重命名对象。

我们可以使用 gsutil rsyncgsutil cp 操作将数据从 Google Cloud Storage 存储桶复制到亚马逊 s3 存储桶。而

gsutil rsync 从存储桶中收集所有元数据并将数据同步到 s3

gsutil -m rsync -r gs://your-gcs-bucket s3://your-s3-bucket

gsutil cp 一个一个地复制文件,由于传输速率良好,大约 1 分钟复制 1 GB。

gsutil cp gs://<gcs-bucket> s3://<s3-bucket-name>

如果您有大量具有高数据量的文件,则使用此 bash 脚本并在后台以多线程运行它,在亚马逊或 GCP 实例中使用 screen 命令并配置 AWS 凭证并验证 GCP 身份验证.

在运行脚本之前列出所有文件并重定向到一个文件并读取该文件作为脚本中的输入以复制该文件

gsutil ls gs://<gcs-bucket> > file_list_part.out

Bash 脚本:

#!/bin/bash
echo "start processing" 
input="file_list_part.out"
while IFS= read -r line
do
    command="gsutil cp ${line} s3://<bucket-name>"
    echo "command :: $command :: $now"
    eval $command
    retVal=$?
    if [ $retVal -ne 0 ]; then
        echo "Error copying file"
        exit 1
    fi
    echo "Copy completed successfully"
done < "$input"
echo "completed processing"

执行 Bash 脚本并将输出写入日志文件以检查已完成和失败文件的进度。

bash file_copy.sh > /root/logs/file_copy.log 2>&1

答案 5 :(得分:0)

对于大量大文件(100MB 以上),您可能会遇到管道损坏和其他烦恼,这可能是由于分段上传要求(如 Pathead 所述)。

在这种情况下,您只需将所有文件下载到您的机器上,然后再上传回来。根据您的连接和数据量,创建 VM 实例以利用高速连接以及在与您不同的机器上在后台运行它的能力可能更有效。

创建 VM 机器(确保服务帐户可以访问您的存储桶),通过 SSH 连接并安装 AWS CLI (apt install awscli) 并配置对 S3 的访问权限 (aws configure)。

运行这两行,或者把它变成一个 bash 脚本,如果你有很多桶要复制。

gsutil -m cp -r "gs://$1" ./
aws s3 cp --recursive "./$1" "s3://$1"

(一般情况下最好使用 rsync,但 cp 对我来说更快)