【问题标题】:Exporting data from Google Cloud Storage to Amazon S3将数据从 Google Cloud Storage 导出到 Amazon S3
【发布时间】:2017-01-12 18:21:06
【问题描述】:

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

BigQuery -> 谷歌云存储 -> Amazon S3 -> Redshift

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

云存储传输服务

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

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

有没有办法可以将数据从 Google Cloud Storage 导出到 Amazon S3?

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 尽管 s3 存储桶具有公共读写访问权限,但同一操作却出现错误。希望我在这里没有遗漏任何东西。 gsutil 在 google cloud shell 中执行。错误消息 - ERROR 1228 14:00:22.190043 utils.py] 无法读取实例数据,放弃失败:没有处理程序准备好进行身份验证。检查了 4 个处理程序。 ['HmacAuthV1Handler', 'DevshellAuth', 'OAuth2Auth', 'OAuth2ServiceAccountAuth'] 检查您的凭据。
    • 在此之前,您需要在 boto.cfg 文件中添加您的 aws 凭据
    • 如果您安装了独立的 gsutil,则 boto 配置文件用于凭据,而如果您将 gsutil 作为 Google Cloud SDK 的一部分安装,则使用凭据存储 (cloud.google.com/storage/docs/gsutil_install#sdk-install)
    • 这可行,但不幸的是 gsutil 不支持分段上传,S3 API 需要大于 5GB 的文件。
    • 我在 google vm 实例上运行上述命令,下载/上传速度约为 500-600 mbps,要迁移的数据为 400gb。这个过程需要很长时间。有什么办法可以加快迁移速度?
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      然后运行命令:

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

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

      希望对您有所帮助。 (作业完成后不要忘记终止计算实例)

      【讨论】:

      • 想了解更多关于您通过 ~1 GB/s 数据传输迁移的文件大小、数量和总数据
      • 我使用了 GH Archive 项目的数据 -> gharchive.org ... 每年将数据传输到 Google Cloud 存储,然后同步到 S3 存储桶。年桶中的每个日期文件都在 ~MBs...!!
      • 但是你为什么要使用计算引擎呢?它在这个设置中的确切作用是什么? @RaxitSolanki
      • 很酷,你想出来了。如果有帮助请点赞回答:)
      【解决方案4】:

      转到 GCP 中的任何实例或云 shell

      首先在您的 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 数据

      【讨论】:

      • 可以在 google cloud shell 中安装 aws cli 吗?如果是的话,你能告诉我怎么做
      【解决方案5】:

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

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

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

      gsutil rsync从bucket中收集所有元数据并将数据同步到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
      

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          猜你喜欢
          • 2017-11-13
          • 1970-01-01
          • 2018-04-04
          • 2021-03-02
          • 1970-01-01
          • 1970-01-01
          • 2019-06-04
          • 2018-12-31
          • 2019-05-12
          相关资源
          最近更新 更多