[英]Moving data from google cloud storage to Amazon s3 via cloud function in a serverless fashion
[英]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
工具,我们可以执行广泛的存储桶和对象管理任务,包括:
我们可以使用gsutil rsync
和gsutil 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
对我来说更快)
gsutil
和aws s3 cp
等工具不会使用分段上传/下载,因此对大文件的性能会很差。
Skyplane是一种在云之间传输数据的更快替代方案(大文件最高可达 110 倍)。 您可以使用以下命令传输数据:
skyplane cp -r s3://aws-bucket-name/ gcs://google-bucket-name/
(免责声明:我是贡献者)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.