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