【问题标题】:Getting status of gsutil cp command in parallel mode在并行模式下获取 gsutil cp 命令的状态
【发布时间】:2019-12-03 11:38:11
【问题描述】:

此命令将大量文件从 Google Cloud 存储复制到我的本地服务器。

gsutil -m cp -r gs://my-bucket/files/ .

有 200 多个文件,每个文件大小超过 5GB。

下载完所有文件后,另一个进程将启动并开始逐个读取文件并提取所需的信息。

问题是,虽然gsutil的copy过程很快,分批下载多个文件的速度非常快,但我还是需要等文件全部下载完再开始处理。

理想情况下,我希望在下载第一个文件后立即开始处理它。但是在多 cp 模式下,似乎无法知道文件何时下载(或者是否存在?)。

根据 Google 文档,这可以在单个文件复制模式下完成。

if ! gsutil cp ./local-file gs://your-bucket/your-object; then
  << Code that handles failures >>
fi

这意味着如果我在没有 -m 标志的情况下运行 cp,我可以获得该文件成功的布尔值,然后我可以开始文件处理。

这种方法的问题是,由于文件正在逐个下载,因此整体下载将花费更长的时间。

有什么见解吗?

【问题讨论】:

    标签: google-cloud-platform google-cloud-storage cp gsutil


    【解决方案1】:

    您可以做的一件事是有一个单独的进程定期列出目录,过滤掉未完全下载的文件(它们被下载到以“.gstmp”结尾的文件名,然后在下载完成后重命名)并保留跟踪您尚未处理的文件。您可以在 gsutil cp 进程完成时终止定期列出进程,或者您可以让它继续运行,以便在您下次下载所有文件时处理下载。

    这样做的两个潜在并发症是:

    1. 如果要下载的文件数量很大,定期目录列表可能会很慢。 “非常大”的大小取决于您使用的文件系统的类型。您可以通过创建一个包含您希望下载的大致文件数量的目录来进行试验,并查看列出所需的时间。另一种选择是使用 gsutil cp -L 选项,它会构建一个清单,显示已下载的文件。然后,您可以循环读取清单,查找已成功下载的文件。
    2. 如果多文件下载在中途失败(例如,由于网络连接断开的时间超过 gsutil 重试的时间),您最终将获得部分文件集。对于这种情况,您可以考虑使用 gsutil rsync,它可以重新启动并从您离开的地方继续。

    【讨论】:

      猜你喜欢
      • 2017-07-22
      • 2020-02-09
      • 2018-06-20
      • 2018-06-01
      • 1970-01-01
      • 2016-03-18
      • 2014-06-23
      • 2010-11-12
      • 1970-01-01
      相关资源
      最近更新 更多