我和一些同事共享一个linux盒子,所有这些都是在mesos生态圈中开发的。测试我常常遇到的框架的最方便的方法是运行mesos-local.sh
(将master和slave组合在一起)。
只要我的同事都不这样做,那就很有效。只要其中一个人使用了该快捷方式,就没有其他人能够这样做,因为主特定临时文件存储在/tmp/mesos
中,运行该mesos实例的用户将拥有这些文件和文件夹的所有权。因此,当另一个用户尝试执行相同的操作时,尝试从框架运行任何任务时会发生以下情况;
F0207 05:06:02.574882 20038 paths.hpp:344] CHECK_SOME(mkdir):失败 创建执行程序目录 “/ TMP / mesos / 0 /从站/ 201402051726-3823062160-5050-31807-0 /框架/ 201402070505-3823062160-5050-20015-0000 /执行人/默认/运行/ d46e7a7d-29a2-4f66-83c9-b5863e018fee'Permission 拒绝
不幸的是,mesos-local.sh
没有提供覆盖该路径的标志,而mesos-master.sh
则通过--work_dir=VALUE
提供。
因此,显而易见的解决方法是不使用mesos-local.sh
,而将主服务器和从服务器用作单独的实例。虽然不太方便......
答案 0 :(得分:0)
无论您运行mesos-master.sh
还是mesos-local.sh
,最简单的防范此问题的解决方法是修补bin/mesos-master-flags.sh
内的环境设置。
该文件由mesos-master本身以及mesos-local使用,因此它是覆盖工作目录的理想位置。
修改bin/mesos-master-flags.sh
并将以下内容添加到其中;
export MESOS_WORK_DIR=/tmp/mesos-"$USER"
现在运行bin/mesos-local.sh
,您应该在其日志输出的开头看到类似的内容;
I0207 05:36:58.791069 20214 state.cpp:33]从中恢复状态 '/ TMP / mesos-tillt / 0 /元'
因此,所有修改了mesos-master-flags.sh
{{}}}的用户都将拥有他们的个人工作目录设置,而且没有其他人踩到彼此的脚步。
如果您不想修补任何文件,您也可以通过手动设置环境变量来简单地预先启动该mesos实例:
MESOS_WORK_DIR=/tmp/mesos-foo bin/mesos-local.sh