我刚刚弄清楚如何使用Condor发送要在集群上的机器上处理的作业。由于我们有很多机器,而且不是每台机器都配置相同,我想知道:
是否可以告诉 condor 只将我的作业(python 脚本)分派到机器上,因为我的脚本依赖于这个包,所以机器上安装了 numpy?
我刚刚弄清楚如何使用Condor发送要在集群上的机器上处理的作业。由于我们有很多机器,而且不是每台机器都配置相同,我想知道:
是否可以告诉 condor 只将我的作业(python 脚本)分派到机器上,因为我的脚本依赖于这个包,所以机器上安装了 numpy?
与任何其他机器属性一样,您只需在机器类中宣传它,然后让您的工作需要它。
要在机器类中宣传它,您可以通过添加如下内容将其硬编码到每台机器的 condor 配置文件中:
has_numpy = True
STARTD_EXPRS = $(STARTD_EXPRS) HAS_NUMPY
...或者更好的是,您可以告诉 Condor 在运行时使用脚本动态发现它,并通过startd classad hook公布结果。为此,请has_numpy
在每台机器上安装一个简单的脚本,如下所示:
#!/usr/bin/env python
try:
import numpy
except ImportError:
print "has_numpy = False"
else:
print "has_numpy = True"
...然后告诉 Condor 每五分钟运行一次,并将结果粘贴到 startd 类中,方法是将以下内容添加到机器的 condor 配置文件中:
HASNUMPY = /usr/libexec/condor/has_numpy
STARTD_CRON_JOBLIST = $(STARTD_CRON_JOBLIST) HASNUMPY
STARTD_CRON_HASNUMPY_EXECUTABLE = $(HASNUMPY)
STARTD_CRON_HASNUMPY_PERIOD = 300
...然后 ta-da(重新配置后)您的机器将动态检测并报告 numpy 是否已安装并可用于 python 脚本。
然后,您只需在作业提交文件中添加相应的要求,如下所示:
Requirements = (has_numpy == True)
...并且您的工作只会在安装了 numpy 的机器上运行。
你需要吗?根据秃鹰手册:
Condor 在运行作业的机器上不需要帐户(登录)。Condor 可以做到这一点是因为它的远程系统调用技术,该技术捕获库调用以执行诸如从磁盘文件读取或写入等操作。调用通过网络传输以在提交作业的机器上执行。
对我来说,这意味着如果提交作业的机器安装了 numpy,它应该可以工作。