Hashicorp 的 Nomad 可以作为 HTCondor 的替代品吗?

Hashicorp 的 Nomad 可以作为 HTCondor 的替代品吗?

除了启动 Nomad 集群并进行实验外,我找不到任何有关此的信息,所以也许这里有人可以提供帮助。

假设您要运行批处理 Java 作业的 100 次迭代,每次迭代都有一组不同的参数并获取生成的输出文件。

input_files1)Nomad 是否接受您指向计算机上的本地文件并会分发该文件的概念?

# in HTCondor would be something like this
transfer_input_files = MyCalculator.jar,logback.xml

2)Nomad 是否会带回此类计算的结果,比如*.csv生成的文件?

# this would do it in HTCondor
should_transfer_files = YES
when_to_transfer_output = ON_EXIT
transfer_output_files = /output_dir

3)nomad 是否允许像 condor 那样使用参数,允许您发送带有n参数的作业,然后将其作为多个作业分发到集群?

# this would do it in HTCondor
Arguments    = x=1
Queue 
(...)
Arguments    = x=100
Queue

答案1

容器被视为无状态的,这意味着您需要在流程中执行额外的步骤才能使其工作。Condor 为您添加了此功能,但我从未发现它有用,而且在我使用它时它从未正常工作(上次是 2009 年)。为了解决这个问题,我将数据传输从 Condor 中完全分离出来。为此,您需要执行以下操作:

您的输出数据文件需要存储在某种持久数据存储中,而不是容器本身中。某些容器允许挂载主机的直接磁盘,甚至通过网络挂载远程磁盘(NFS、Samba、SSHFS 等)。过去,我曾使用分布式文件系统(或网络可挂载文件系统)(如 AWS-S3)来满足这一要求。

2009 年,当我使用 Condor 完成我的硕士论文时,我通过为批处理作业中运行的 Java 应用程序构建 BASH 包装器脚本来处理此要求。该脚本将处理发送适当的输入变化(从分布式文件系统资源下载),当作业完成时,脚本将启动将输出文件数据传输到相同的分布式文件资源(使用作业名称、作业编号、运行作业的主机名以及文件输出名称中的日期时间戳)。

HTCondor、Nomad 甚至 Kubernetes 都可以帮你解决这组问题。你需要在作业运行器包装器脚本中添加某种逻辑,以便在启动和关闭应用程序本身之前处理数据传输。

我希望这有帮助。

相关内容