【问题标题】:"cat urls.txt | gsutil -m cp -I gs://target-bucket-name/" consistently hangs after transferring ~10,000 files“cat urls.txt | gsutil -m cp -I gs://target-bucket-name/”在传输约 10,000 个文件后始终挂起
【发布时间】:2018-05-05 13:50:00
【问题描述】:

我正在尝试将大约 80,000 张图片从一个谷歌云存储桶复制到另一个。 我正在使用包含 gsutil 4.28 的 google cloud sdk 180.0.1 的 mac 启动此操作。

要在文本文件中传输的每个图像的 ~url,我像这样将其提供给 gsutil cp ...

$cat urls.txt | gsutil -m cp -I gs://target-bucket-name/

其中 urls.txt 看起来像 ...

head -3 urls.txt 
gs://source-bucket-name/1506567870546.jpg
gs://source-bucket-name/1506567930548.jpg
gs://source-bucket-name/1507853339446.jpg

在传输了大约 10,000 张图像后,该过程一直挂起。

我已编辑 $HOME/.boto 以取消注释:

parallel_composite_upload_threshold = 0

这并没有阻止操作挂起。

我不确定导致挂起的原因。

基本需求是通用实用程序将 N 个项目从一个存储桶复制到另一个存储桶。我需要一个能让我完成这个使命的工作。

更新

删除 -m 选项似乎可以解决挂起问题,但文件传输现在明显变慢。如果可能的话,我希望能够避免挂起问题,同时还能获得使用并发所带来的速度。

【问题讨论】:

    标签: google-cloud-storage gsutil


    【解决方案1】:
    1. gstuil 不应挂起。这是一个错误。您能否记录 gsutl -D 的输出,当它挂起时,在gsutil github repo 中创建一个问题并附上输出并在此处评论并附上指向它的链接?您可以使用以下命令记录输出:

      $ cat urls.txt | gsutil -D -m cp -I gs://target-bucket-name/ 2>&1 | tee output
      
    2. 同时,您可以尝试通过更改 boto 文件中的这些默认值来减少并行模式 (-m) 使用的线程和进程数。

      parallel_process_count = 1    # Default - 12
      parallel_thread_count = 10    # Default - 10
      
    3. 请注意,gsutil 可以选择将存储桶或子目录中的所有文件复制到新存储桶,以及仅使用以下命令复制目标中已更改或不存在的文件:

      gsutil -m cp gs://source-bucket/ gs://target-bucket
      gsutil -m cp 'gs://source-bucket/dir/**' gs://target-bucket
      gsutil -m rsync -r gs://source-bucket gs://target-bucket
      

    【讨论】:

    • 谢谢。从 macos 上的 gcloud 182 (gsutil 4.28) 开始,它似乎可以正常工作。
    猜你喜欢
    • 2018-06-20
    • 2015-01-30
    • 2013-06-04
    • 2014-08-06
    • 2021-05-20
    • 2021-11-25
    • 2014-06-11
    • 2015-12-28
    • 2013-11-27
    相关资源
    最近更新 更多