使用Dispatcher的Spark Mesos集群模式

时间:2015-09-25 09:52:05

标签: apache-spark mesos

我只有一台机器,并希望使用mesos集群模式运行spark作业。使用节点集群运行可能更有意义,但我主要想首先测试mesos以检查它是否能够更有效地利用资源(在没有静态分区的情况下同时运行多个spark作业)。我尝试了很多方法但没有成功。这是我做的:

  1. 构建mesos并运行mesos master和slave(同一台机器中的2个slave)。

    sudo ./bin/mesos-master.sh --ip=127.0.0.1 --work_dir=/var/lib/mesos
    sudo ./bin/mesos-slave.sh --master=127.0.0.1:5050 --port=5051 --work_dir=/tmp/mesos1
    sudo ./bin/mesos-slave.sh --master=127.0.0.1:5050 --port=5052 --work_dir=/tmp/mesos2
    
  2. 运行spark-mesos-dispatcher

    sudo ./sbin/start-mesos-dispatcher.sh --master mesos://localhost:5050
    
  3. 使用调度程序作为主URL提交应用程序。

    spark-submit  --master mesos://localhost:7077 <other-config> <jar file>
    
  4. 但它不起作用:

        E0925 17:30:30.158846 807608320 socket.hpp:174] Shutdown failed on fd=61: Socket is not connected [57]
        E0925 17:30:30.159545 807608320 socket.hpp:174] Shutdown failed on fd=62: Socket is not connected [57]
    

    如果我使用spark-submit --deploy-mode集群,那么我收到另一条错误消息:

        Exception in thread "main" org.apache.spark.deploy.rest.SubmitRestConnectionException: Unable to connect to server
    

    如果我不使用调度程序但直接使用mesos master url,那么它可以正常工作: - master mesos:// localhost:5050(客户端模式)。根据{{​​3}},Mesos群集不支持群集模式,但它们为群集模式documentation提供了另一条指令。这有点令人困惑吗?我的问题是:

    1. 我如何才能使它有效?
    2. 如果我直接从主节点提交app / jar,我应该使用客户端模式而不是集群模式吗?
    3. 如果我有一台计算机,我应该生成一个或多个mesos slave进程。基本上,我有一些火花工作,不想做资源的静态分区。但是当使用没有静态分区的mesos时,它看起来要慢得多吗?
    4. 感谢。

3 个答案:

答案 0 :(得分:1)

我使用你的场景尝试,它可能是工作。 有一点不同,我使用ip地址而不是“localhost”和“127.0.0.1” 所以,再试一次,检查http://your_dispatcher:8081(在浏览器上)是否存在。

这是我的spark-submit命令:

$spark-submit --deploy-mode cluster --master mesos://192.168.11.79:7077 --class "SimpleApp"  SimpleAppV2.jar

如果成功,您可以看到如下

{
  "action" : "CreateSubmissionResponse",
  "serverSparkVersion" : "1.5.0",
  "submissionId" : "driver-20151006164749-0001",
  "success" : true
}

当我收到您的错误日志时,我重启机器并重试您的步骤。它也有效。

答案 1 :(得分:1)

似乎有两件事令人困惑:在群集中启动Spark应用程序(而不是本地)并将驱动程序启动到群集中。

Submitting Applications的顶部开始:

  

Spark的bin目录中的spark-submit脚本用于在集群上启动应用程序。它可以通过统一的界面使用Spark支持的所有集群管理器,因此您不必为每个集成管理器专门配置应用程序。

因此,Mesos是受支持的集群管理器之一,因此您可以run Spark apps on a Mesos cluster

编写时不支持的Mesos是将驱动程序启动到集群中,这是--deploy-mode的命令行参数./bin/spark-submit指定的内容。由于--deploy-mode的默认值为client,您可以省略它,或者如果您想明确指定它,请使用:

./bin/spark-submit --deploy-mode client ...

答案 2 :(得分:1)

尝试使用6066端口而不是7077.较新版本的Spark更喜欢使用REST API来提交作业。

请参阅https://issues.apache.org/jira/browse/SPARK-5388