【问题标题】:How to download a file from the internet to a Google Cloud bucket directly如何将文件从互联网直接下载到 Google Cloud 存储桶
【发布时间】:2019-12-02 19:46:52
【问题描述】:

我想直接从互联网上下载一个超过 20GB 的文件到谷歌云存储桶中。就像在本地命令行中执行以下操作一样:

wget http://some.url.com/some/file.tar 

我拒绝将文件下载到我自己的计算机,然后使用以下方法将文件复制到存储桶:

gsutil cp file.tar gs://the-bucket/

目前我正在尝试(就在此刻)使用 datalab 下载文件,然后将文件从那里复制到存储桶。

【问题讨论】:

标签: google-cloud-platform


【解决方案1】:

与 Google Cloud Storage 相关的 Google Cloud Platform 功能是称为“存储传输服务”的功能区域。这方面的文档可在here 获得。

在最高级别,此功能允许您定义 Google 外部的数据源,例如可用作 URL 或 AWS S3 存储的数据,然后安排在后台将其复制到 Google Cloud Storage。此功能似乎执行您想要的任务...数据直接从 Internet 源复制到 GCS。


一个完全不同的故事是 GCP 本身提供计算能力的认识。这意味着您可以通过简单的机制(例如 VM、Cloud Functions 或 Cloud Run)在 GCP 上运行自己的逻辑。这有助于我们在这个故事中意识到我们可以执行我们的代码以将基于 Internet 的数据从 GCP 本身内下载到本地临时文件。然后可以将该文件从 GCP 内上传到 GCS。最终进入 GCP 的数据从来没有从源头传输到谷歌。从源中检索数据后,从 GCP 计算到 GCS 存储的数据传输速率应该是最佳的,因为它专门通过 Google 的内部超高速网络传输。

【讨论】:

  • 请注意,您需要在 URL 列表中提供对象的 base64 编码的 MD5 哈希。如果您事先不知道,您仍然需要下载该文件。
  • 谢谢。但是,您知道从命令行执行此操作的任何方法吗?另外,我想从kaggle下载数据,它不提供任何静态url,我需要调用kaggle的命令来下载数据集,所以Storage Transfer在这里没有帮助我.
  • 我已经用第二个可能的故事更新了答案供我们考虑。
【解决方案2】:

您可以在 GCP 上的云 shell 中执行 curl http://some.url.com/some/file.tar | gsutil cp - gs://YOUR_BUCKET_NAME/file 命令。这样一来,它就永远不会使用您自己的网络,而是完全保留在 GCP 中。

【讨论】:

    【解决方案3】:

    对于大文件,单行通常会失败,谷歌存储传输服务也是如此。然后需要 Kolban 答案的第二部分,我想我会添加更多细节,因为可能需要时间来找出实际下载到谷歌计算实例并上传到存储桶的最简单方法。

    对于许多用户来说,我相信最简单的方法是从 Google AI Platform 打开笔记本并执行以下操作:

    %pip install wget
    import wget
    from google.cloud import storage       # No install required
    
    wget.download('source_url', 'temp_file_name')
    client = storage.Client()
    bucket = client.get_bucket('target_bucket')
    blob = bucket.blob('upload_name')
    blob.upload_from_filename('temp_file_name')
    

    无需设置环境,受益于笔记本的便利,如果笔记本使用相同的 GCP 帐户托管,客户端将自动访问您的存储桶。

    【讨论】:

      【解决方案4】:

      我找到了similar post,其中解释说您可以从 Web 下载文件并在一个命令行中将其复制到您的存储桶中:

      curl http://some.url.com/some/file.tar | gsutil cp - gs://YOUR_BUCKET_NAME/file.tar
      

      我在自己的存储桶中进行了尝试,它工作正常,所以我希望这是您所期望的。

      【讨论】:

      • 感谢您的回复。但是,从您的方法看来,您仍在下载到本地计算机,然后...将输出(流式传输?)复制到存储桶。
      猜你喜欢
      • 1970-01-01
      • 2019-10-18
      • 2021-04-11
      • 1970-01-01
      • 2017-11-29
      • 2014-10-25
      • 1970-01-01
      • 2021-10-04
      • 2020-05-05
      相关资源
      最近更新 更多