![Hashicorp 的 Nomad 可以作为 HTCondor 的替代品吗?](https://linux22.com/image/728146/Hashicorp%20%E7%9A%84%20Nomad%20%E5%8F%AF%E4%BB%A5%E4%BD%9C%E4%B8%BA%20HTCondor%20%E7%9A%84%E6%9B%BF%E4%BB%A3%E5%93%81%E5%90%97%EF%BC%9F.png)
除了启动 Nomad 集群并进行实验外,我找不到任何有关此的信息,所以也许这里有人可以提供帮助。
假设您要运行批处理 Java 作业的 100 次迭代,每次迭代都有一组不同的参数并获取生成的输出文件。
input_files
1)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 都可以帮你解决这组问题。你需要在作业运行器包装器脚本中添加某种逻辑,以便在启动和关闭应用程序本身之前处理数据传输。
我希望这有帮助。