我是使用 Startcluster/qsub/grid engine 来运行并行作业的新手,我尝试阅读其他一些相同的帖子。我仍然不确定如何为我的特定需求构建可扩展的解决方案。在继续之前,我想接受更多建议。
以下是我的要求:
我有一个巨大的 tar 文件 [~40 - 50 GB,它可以达到 100GB] -----> 我在这里无能为力。我接受了一个巨大的单个 tar 文件作为输入。
我必须解压并解压缩它----->我运行 tar xvf tarfilename.tar | 并行 pbzip -d 解压缩和解压缩相同。
这种解压缩的输出是几十万个文件,大约 500,000 个文件。
必须处理此未压缩文件。我有模块化代码,可以接收每个文件并处理它并输出 5 个不同的文件。
Tar File -----Parallel Uncompression---> Uncompressed Files -----Parallel Processing ---> 每个文件处理 5 个输出文件
我目前有一个在 16 核、16GB 内存上运行的并行 python 脚本,它接收这个未压缩文件列表并并行处理相同的文件。
问题是我如何无缝扩展。例如,如果我的代码已经运行了 10 个小时,并且我想再添加一台 8 核机器,我不能在并行 python 中执行它,因为我必须提前知道处理器的数量。
同时,当我在当前集群中动态添加更多节点时,数据的可访问性和读写操作如何?
因此,我开始阅读并使用 starcluster 和 qsub 进行基本实验。虽然我看到我可以通过 qsub 提交多个作业,但我将如何使其从未压缩的输入文件夹中获取输入文件?
例如,我可以编写一个 script.sh 在 for 循环中一个一个地选择文件名并将其提交给 qsub 命令吗?还有其他有效的解决方案吗?
比如说,如果有 3 台机器,每台机器有 16 个 CPU,如果我向队列提交 48 个作业,qsub 是否会在集群的不同 CPU 中自动启动它们,或者我是否必须使用并行环境参数,如 -np orte 命令设置数量每个集群中的 CPU 数量。是否有必要让我的 python 脚本 MPI 可执行?
总而言之,我有几十万个文件作为输入,我想将它们提交给多核机器的作业队列。如果我动态添加更多机器,作业应该会自动分配。
另一个主要挑战是我需要在最后汇总 500,000 次操作的所有输出吗?是否有关于如何在输出被写出时聚合并行作业的输出的建议?
我正在测试运行几个场景,但我想知道是否有人尝试过类似的场景。
使用 Hadoop 插件有什么建议吗?http://star.mit.edu/cluster/docs/0.93.3/plugins/hadoop.html
在此先感谢卡西克