我将设置一个Mesos群集来运行一次性docker作业,例如长期快速计算机。当然我想得到计算结果,所以我想我应该使用Docker卷。
现在,当我将docker作业发送到集群时,例如在Marathon或Chronos的JSON作业文件中指定卷,我的计算结果在哪里?
我猜它被放入从节点上的相应目录中,但是我真的必须进入Mesos界面,查找哪个节点执行了我的作业,ssh到该节点并将我生成的文件复制出来? 这似乎与Mesos从单个计算机中抽象的整个想法非常违反直觉。
这种情况的优雅解决方案是什么?我是集群管理的新手,所以我能想到的唯一好的解决方案是分布式文件系统,虽然我不知道这是否会在Marathon或Chronos的作业文件中得到支持。
答案 0 :(得分:2)
来自rukletsov和js84的其他答案都是不错的选择,但我想指出一个简单的选择。当使用Mesos的Docker容器时,任务沙箱在$ MESOS_SANDBOX中作为卷安装,默认情况下在容器内/mnt/mesos/sandbox/
,因此您可以将结果存储在那里或只写入stdout / stderr,它也会重定向到那里。无需创建自己的音量。
然后您可以使用mesos-cli到mesos tail --follow task-id file
或mesos cat task-id file [file]
答案 1 :(得分:1)
目前正在努力在mesos中更好地支持分布式文件系统。 截至目前,一个可能的解决方案是使用hdfs并在那里写下你的输出。
希望这有帮助!
答案 2 :(得分:1)
可以肯定地说,Mesos假设您的所有最终数据都存储在任务完成的某个地方,并且您的任务或您的框架有责任确保这一点。如果您想要保留中间结果,或者在任务之间共享结果,您可以查看目前正在开发中的持久性卷,并且有望在下一个Mesos版本中登陆。请注意,它们被视为节点资源的一部分而不会被复制,因此在节点发生故障时将丢失。
作为分布式文件系统的替代方案,您可以修改您的任务,以便将计算结果发送到某个存储,例如:数据库,ftp服务器等