我将建立一个mesos集群来运行单用途docker作业,例如long-rapidminer计算。当然我想得到计算的结果,所以我想我应该用docker体积。
现在,当我向集群发送一个docker作业,例如在marathon或chronos的json作业文件中指定卷时,我的计算结果落在哪里?
我猜它被放在从属节点上的相应目录中,但是我真的必须进入mesos接口,查找哪个节点执行了我的作业,ssh到那个节点并复制我的结果文件吗?这似乎与从单台计算机中抽象出来的Mesos的整个思想非常背道而驰。
对于这种情况,什么是优雅的解决方案?我对集群管理非常陌生,所以我能想到的唯一好的解决方案是分布式文件系统,尽管我不知道marathon或chronos的jobfile是否支持它。
3条答案
按热度按时间6rqinv9w1#
可以肯定地说,mesos假设您的所有最终数据都存储在任务完成时的某个地方,而确保这一点的责任是您的任务或框架(如果您愿意)。如果您想持久化中间结果,或者在任务之间共享结果,可以查看持久卷,它们目前正在开发中,有望在下一个mesos版本中发布。请注意,它们被视为节点资源的一部分,不会被复制,因此在节点发生故障时会丢失。
作为分布式文件系统的替代方案,您可以修改任务,使其将计算结果发送到特定存储,例如数据库、ftp服务器等。
yzuktlbb2#
目前正在进行工作,以更好地支持mesos中的分布式文件系统。到目前为止,一个可能的解决方案是使用hdfs并在那里编写输出。
希望这有帮助!
axzmvihb3#
rukletsov和js84给出的其他答案都是不错的选择,但我想指出一个简单的选择。使用mesos的docker容器器时,默认情况下,任务沙盒作为卷装入$mesos\u沙盒
/mnt/mesos/sandbox/
在容器中,这样您就可以将结果存储在那里,或者只需写入stdout/stderr,stdout/stderr也会重定向到那里。无需创建自己的卷。然后可以使用mesos cli
mesos tail --follow task-id file
或者mesos cat task-id file [file]