Google cloud storage 如何使用elasticluster、网格引擎工具和google cloud将文件列表压缩为单个gzip文件

Google cloud storage 如何使用elasticluster、网格引擎工具和google cloud将文件列表压缩为单个gzip文件,google-cloud-storage,google-genomics,Google Cloud Storage,Google Genomics,首先,我要感谢大家提前提供的帮助,因为这将有助于澄清遗漏的细节。我需要的是将多个文件压缩到一个gzip中,但是,指南仅显示了如何将文件列表压缩为单个gzip文件。再次感谢您的帮助,因为这项设置的资源和文档非常少。(如果有其他信息,请包括到来源的链接) 设置网格引擎后,我浏览了指南中的示例 我假设没有使用脚本将多个文件组合成一个gzip,对吗 Elasticluster网格引擎设置中是否有将多个文件压缩到1 gzip的解决方案 可以对网格引擎工具进行哪些更改以使其正常工作 编辑 我们考虑使用集群的

首先,我要感谢大家提前提供的帮助,因为这将有助于澄清遗漏的细节。我需要的是将多个文件压缩到一个gzip中,但是,指南仅显示了如何将文件列表压缩为单个gzip文件。再次感谢您的帮助,因为这项设置的资源和文档非常少。(如果有其他信息,请包括到来源的链接)

设置网格引擎后,我浏览了指南中的示例

我假设没有使用脚本将多个文件组合成一个gzip,对吗

Elasticluster网格引擎设置中是否有将多个文件压缩到1 gzip的解决方案

可以对网格引擎工具进行哪些更改以使其正常工作

编辑


我们考虑使用集群的原因是,我们确实希望同时发生多个操作,每个订单压缩文件,这将系统地发生,以便供应商可以为每个订单下载单个压缩文件。

因此有很多方法可以做到这一点,但问题是,您不能在Google存储上直接将文件集合(或目录)压缩到一个文件中,需要在传输之前在本地执行tar/gzip组合

如果需要,您可以通过以下方式自动压缩数据:

gsutil cp -Z
详情请参见以下链接:

好的是,您可以从Google Storage上的压缩数据中检索未压缩的结果,因为它能够执行以下操作:

您将注意到以下脚本的最后一行:

下面这一行基本上将当前压缩文件复制到Google云存储:

gcs_util::upload "${WS_OUT_DIR}/*" "${OUTPUT_PATH}/"
您需要的是首先对本地scratch目录中的文件执行tar/zip,然后gsutil将压缩文件复制到Google存储,但在开始压缩之前,确保所有需要压缩的文件都在scratch目录中。最有可能的情况是,您需要用SSH将它们复制(scp)到其中一个节点(即master),然后在将其发送到Google存储之前,让master tar/gzip访问整个目录。我假设每个GCE实例都有自己的暂存盘,但是在处理GCE时,“gsutil cp”传输非常快

由于Google Storage在使用Google Compute实例进行数据传输时速度很快,因此最简单的第二种选择是在文件中标出第66-69行:

这样就不会进行压缩,但复制会通过gsutil::upload在最后一行进行,以便将所有未压缩的文件传输到同一个Google存储桶。然后使用主节点的“gsutil cp”将它们复制回本地,以便通过tar/gz本地压缩它们,然后使用“gsutil cp”将压缩的目录文件复制回bucket

希望有帮助,但这很棘手, 保罗
  • 有问题的文件是否在云存储中
  • 有问题的文件是本地驱动器还是网络驱动器
  • 在您的描述中,您指出“我需要的是将多个文件压缩到一个gzip中”。我不清楚这是否需要一组计算机。这听起来更像是你只想和它一起使用

    tar实用程序将创建一个存档文件,它还可以对其进行压缩。例如:

    $ # Create a directory with a few input files
    $ mkdir myfiles
    $ echo "This is file1" > myfiles/file1.txt
    $ echo "This is file2" > myfiles/file2.txt
    
    $ # (C)reate a compressed archive
    $ tar cvfz archive.tgz myfiles/*
    a myfiles/file1.txt
    a myfiles/file2.txt
    
    $ # (V)erify the archive
    $ tar tvfz archive.tgz 
    -rw-r--r--  0 myuser mygroup      14 Jul 20 15:19 myfiles/file1.txt
    -rw-r--r--  0 myuser mygroup      14 Jul 20 15:19 myfiles/file2.txt
    
    要提取内容,请使用:

    $ # E(x)tract the archive contents
    $ tar xvfz archive.tgz 
    x myfiles/file1.txt
    x myfiles/file2.txt
    
    更新:

    在更新的问题描述中,您已指出可能同时处理多个订单。如果需要对结果进行tar处理的频率较低,并且提供tar处理的结果对时间不太敏感,那么您可以使用单个节点来实现这一点

    但是,随着问题规模的扩大,您可以考虑使用

    您可以在客户订单完成时启动“管道”(在本例中是单个任务),而不是保持固定集群的运行

    对Pipelines API的调用将启动一个VM,该VM的唯一目的是下载客户的文件,对其进行tar,并将生成的tar文件推送到云存储中。Pipelines API基础架构为您执行从云存储到云存储的复制。实际上,您只需要提供tar命令行

    这里有一个类似的例子:

    本例将下载一个文件列表,并独立压缩每个文件。它可以很容易地修改为tar输入文件列表

    查看github存储库以获取更多信息和示例


    -Matt

    我可以说明问题的定义吗?如果我理解正确,您可以告诉我,因为Matt和我都提供了完全相同的解决方案,但不知何故,这似乎不够

    问题定义

    • 您有一个订单,用于定义处理某些数据的任务的开始
    • 数据处理将在几个计算节点之间进行分割,每个节点生成一个存储在GS目录中的结果文件
    • 目标是:

    • 从GS bucket收集文件(由每个节点生成)
    • 将文件集合归档为一个文件
    • 然后压缩归档文件,然后
    • 将其推回另一个GS位置
    如果我总结得恰当,请告诉我

    谢谢,
    Paul

    要压缩在一起的文件位于云存储中的不同文件夹中。压缩后,单个zip/gzip将被发送回另一个云存储文件夹。我更新了我的问题,使之更具体。最终,我们希望在这个过程中使用tar,但我仍然觉得,由于许多操作可能是同时进行的,因此仍然需要一个集群。整个集群操作对我来说是非常新的,t