我想首先感谢大家提前帮助,因为这有助于澄清the readthedocs.io guide遗漏的详细信息。我需要的是将几个文件压缩成一个gzip,但是,该指南仅显示如何将文件列表压缩为单独的gzip压缩文件。同样,我感谢任何帮助,因为这个设置的资源和文档很少。 (如果有一些额外信息,请包含指向来源的链接)
在我设置了网格引擎之后,我浏览了指南中的示例。
我是否正确假设没有使用grid-computing-tools将多个文件合并到一个gzip中的脚本?
Elasticluster Grid Engine设置上是否有任何解决方案可将多个文件压缩为1个gzip?
可以对grid-engine-tools进行哪些更改以使其正常工作?
修改
我们考虑群集的原因是我们确实希望同时进行多个操作,每个订单压缩文件,这将系统地发生,以便供应商可以按订单下载单个压缩文件。
答案 0 :(得分:1)
我可以说明问题的定义,如果我理解正确的话你可以告诉我,因为Matt和我都提供了完全相同的解决方案,并且它似乎不够。
问题定义
目标是:
如果我对其进行了适当的总结,请告诉我,
谢谢, 保罗
答案 1 :(得分:0)
所以有很多方法可以做到这一点,但问题是你无法直接在Google Storage上压缩文件集合或目录到一个文件中,并且需要在转移之前在本地执行tar / gzip组合它
如果您需要,可以通过以下方式自动压缩数据:
gsutil cp -Z
以下链接详细说明:
https://cloud.google.com/storage/docs/gsutil/commands/cp#changing-temp-directories
好的一点是,您可以从Google Storage上的压缩数据中检索未压缩的结果,因为它可以执行Decompressive Transcoding:
https://cloud.google.com/storage/docs/transcoding#decompressive_transcoding
您将注意到以下脚本的最后一行:
https://github.com/googlegenomics/grid-computing-tools/blob/master/src/compress/do_compress.sh
以下行基本上会将当前压缩文件复制到Google云端存储:
gcs_util::upload "${WS_OUT_DIR}/*" "${OUTPUT_PATH}/"
您需要首先在本地临时目录中的文件上执行tar / zip,然后gsutil将压缩文件复制到Google Storage,但要确保 所有文件<需要压缩的/ em> 在开始压缩之前位于暂存目录中。很可能你需要将它们SSH(scp)SSH复制到其中一个节点(即master),然后让master tar / gzip整个目录,然后再发送到Google Storage。我假设每个GCE实例都有自己的暂存盘,但在GCE上工作时,“gsutil cp”传输速度非常快。
由于谷歌存储与Google Compute实例的数据传输速度很快,因此最简单的第二个选择是在do_compress.sh文件中标出第66-69行:
https://github.com/googlegenomics/grid-computing-tools/blob/master/src/compress/do_compress.sh
这样就不会发生压缩,但是副本通过gsutil :: upload在最后一行发生,以便将所有未压缩的文件传输到同一个Google Storage存储桶。然后使用主节点中的“gsutil cp”将它们本地复制回来,以便通过tar / gz在本地压缩它们,然后使用“gsutil cp”将压缩的目录文件复制回存储桶。
希望它有所帮助,但它很棘手, 保罗
答案 2 :(得分:0)
在您的描述中,您指出“我需要的是将多个文件压缩为单个gzip”。我不清楚是否需要一组计算机。这听起来更像是您只想使用tar和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
更新:
在更新的问题说明中,您已表明可能同时处理了多个订单。如果需要定位结果的频率很低,并且提供目标结果并不是非常时间敏感的,那么您可以使用单个节点执行此操作。
但是,随着问题规模的扩大,您可能会看一下使用Pipelines API。
当客户的订单完成时,您可以启动“管道”(在本例中为单个任务),而不是保持固定集群的运行。
对Pipelines API的调用将启动一个VM,其唯一目的是下载客户的文件,将其tar起来,并将生成的tar文件推送到Cloud Storage。 Pipelines API基础架构为您执行从云存储复制到云存储。您实际上只需要提供tar命令行。
这里有一个类似的例子:
https://github.com/googlegenomics/pipelines-api-examples/tree/master/compress
此示例将下载文件列表并单独压缩每个文件。它可以很容易地修改为tar输入文件列表。
查看https://github.com/googlegenomics/pipelines-api-examples github存储库以获取更多信息和示例。
-Matt