我有一个java程序,将处理800个图像。
我决定使用Condor作为分布式计算的平台,旨在将这些图像划分到可用的节点上,并将处理后的结果返回给我。get processed ->将结果返回给我。
假设我有4个节点。我希望在每个节点上将处理过程划分为200个图像,并将最终结果返回给我。
我试着正常执行它,将它作为java程序提交,并说明要求=机器== ..(说明所有节点)。但它似乎不起作用。
如何划分处理并并行执行?
发布于 2015-09-01 23:43:57
HTCondor绝对可以帮助您,但您可能需要自己做一些工作:-)
我想到了两种可能的方法:作业数组和DAG应用程序。
作业阵列:从HTCondor Quick Start Guide上的示例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中组织处理。在这种情况下,您可以使用预处理脚本( DAG文件中的SCRIPT PRE条目)来组织输入数据(可能会创建适当命名的符号链接)。真正的工作就像上面的例子一样。
https://stackoverflow.com/questions/23852919
复制相似问题