Mesos上的Spark集群模式:如何将配置传递给执行者?

时间:2016-02-26 15:00:28

标签: apache-spark docker mesos

我正在测试使用Docker在MESOS上执行Spark算法。我设法在Docker中使用执行程序在客户端模式下执行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 slaves日志,我认为执行程序不在docker中运行:“docker.cpp:775] No container info found, skipping launch”。由于我的Mesos奴隶没有安装火花,它失败了。

在docker容器中启动时,我在第一个spark-submit中给出的spark conf似乎没有传送给Driver提交的conf。我找到的唯一解决方法是修改我的Docker镜像,以便在其内部定义spark.mesos.executor.docker.image属性。通过这种方式,我的执行者可以很好地获得conf,并在Mesos上的docker中启动。这对我来说似乎有点复杂,我觉得传递给早期spark-submit的配置应该传递给Driver提交...

所以我的问题是:

  • 我做错了吗?
  • 是否有更好的解决方案可以通过驱动程序将mesos-dispatcher之前的spark配置传输到执行程序?

1 个答案:

答案 0 :(得分:2)

https://issues.apache.org/jira/browse/SPARK-13258

: - )

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