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