繁体   English   中英

将数据从 Google Cloud Storage 导出到 Amazon S3

[英]Exporting data from Google Cloud Storage to Amazon S3

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

BigQuery -> Google Cloud Storage -> Amazon S3 -> Redshift

我知道 Google Cloud Storage Transfer Service,但我不确定它能帮到我。 来自谷歌云文档:

云存储传输服务

本页介绍 Cloud Storage Transfer Service,您可以使用它快速将在线数据导入 Google Cloud Storage。

我了解此服务可用于将数据导入 Google Cloud Storage 而不能从中导出。

有什么方法可以将数据从 Google Cloud Storage 导出到 Amazon S3?

您可以使用 gsutil 将数据从 Google Cloud Storage 存储桶复制到 Amazon 存储桶,使用的命令如下:

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

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

转到 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

附上我的截图

在此处输入图片说明

然后使用gsutil

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

在此处输入图片说明 在此处输入图片说明

几分钟内传输了 16GB 数据

使用 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

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

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

然后运行命令:

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

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

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

使用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 脚本并在后台以多线程运行它,使用 amazon 或 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

对于大量大文件 (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对我来说更快)

gsutilaws s3 cp等工具不会使用分段上传/下载,因此对大文件的性能会很差

Skyplane是一种在云之间传输数据的更快替代方案(大文件最高可达 110 倍)。 您可以使用以下命令传输数据:

skyplane cp -r s3://aws-bucket-name/ gcs://google-bucket-name/

(免责声明:我是贡献者)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM