1

我有一个可以处理 800 张图像的 java 程序。

我决定使用 Condor 作为分布式计算的平台,目标是我可以将这些图像划分到可用节点上 -> 得到处理 -> 将结果组合回给我。

假设我有 4 个节点。我想将处理划分为每个节点上的 200 个图像,并将最终结果组合回给我。

我尝试通过将其作为 java 程序提交并说明要求 = Machine == .. (说明所有节点)来正常执行它。但这似乎不起作用。

如何划分处理并并行执行?

4

1 回答 1

1

HTCondor 绝对可以帮助您,但您可能需要自己做一些工作:-)

我想到了两种可能的方法:作业数组和 DAG 应用程序。

作业数组:从 HTCondor快速入门指南的示例 5 中可以看出,您可以使用该queue命令提交多个作业。例如,queue 800在您的作业文件的底部,将向您的 HTCondor 池提交 800 个作业。

在这种情况下,人们所做的是使用文件名约定来组织要处理的数据,并在作业文件中利用该约定。例如,您可以将图像重命名为img_0.jpg, img_1.jpg, ... img_799.jpg(可能使用符号链接而不是重命名实际文件),然后使用以下行的作业文件:

Executable = /path/to/my/script
Arguments = /path/to/data/dir/img_$(Process)
Queue 800

当 800 个作业运行时,$(Process)会自动分配相应进程 ID 的值(即从 0 到 799 的整数)。这意味着您的代码将选择正确的图像进行处理。

DAG:另一种方法是在一个简单的DAG中组织您的处理。在这种情况下,您可以有一个预处理脚本(SCRIPT PREDAG 文件中的条目)来组织您的输入数据(可能创建适当命名的符号链接)。真正的工作就像上面的例子一样。

于 2015-09-01T15:43:57.140 回答