Mesos上的Spark集群模式:如何将configuration传递给执行器?

我正在testing使用Docker在MESOS上执行Sparkalgorithm。 我设法在客户端模式下执行Spark内部的执行者,但我想走得更远,也有我的驱动程序运行到Docker容器。 在这里,我遇到了一个我不太确定的行为,让我试着解释一下。

我使用如下命令通过MesosClusterDispatcher提交我的Spark应用程序:

$ ./bin/spark-submit --class org.apache.spark.examples.SparkPi --master mesos://spark-master-1:7077 --deploy-mode cluster --conf spark.mesos.executor.docker.image=myuser/myimage:0.0.2 https://storage.googleapis.com/some-bucket/spark-examples-1.5.2-hadoop2.6.0.jar 10 

我的司机在Docker容器内运行良好,但执行者失败:

 "sh: /some/spark/home/bin/spark-class: No such file or directory" 

看着MESOS奴隶日志,我认为执行者不会在docker.cpp:775] No container info found, skipping launch运行:“ docker.cpp:775] No container info found, skipping launch ”。 由于我的Mesos奴隶没有安装火花,它失败了。

看起来,我在第一次提交spark-submit时的sparkconfiguration文件,在Docker容器中启动时,并不会传递给Driver提交的conf文件。 我发现唯一的解决方法是修改我的Docker图像,以便在其spark属性中定义spark.mesos.executor.docker.image属性。 这样一来,我的执行者就可以很好地运行,并在Mesos的Docker中启动。 这似乎有点复杂,我觉得configuration传递给早期的spark-submit应该传递给Driver提交…

所以我的问题是:

  • 难道我做错了什么?
  • 有没有更好的解决scheme,通过驱动程序将mesos-dispatcher之前的火花configuration传递给执行程序?

https://issues.apache.org/jira/browse/SPARK-13​​258

🙂

我会很快解决这个问题的。 JIRA中描述的解决方法是使用SPARK_JAVA_OPTS而不是--conf