【问题标题】:Spark Mesos Cluster Mode using Dispatcher使用 Dispatcher 的 Spark Mesos 集群模式
【发布时间】:2015-12-23 03:05:39
【问题描述】:

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

  1. 构建 mesos 并运行 mesos 主机和从机(同一台机器上的 2 个从机)。

    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>
    

但它不起作用:

    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 主 url,它会完美工作:--master mesos://localhost:5050(客户端模式)。根据documentation,Mesos 集群不支持集群模式,但他们给出了集群模式here 的另一条指令。所以有点混乱?我的问题是:

  1. 我怎样才能让它工作?
  2. 如果我直接从主节点提交应用程序/jar,是否应该使用客户端模式而不是集群模式?
  3. 如果我有一台计算机,我应该生成 1 个或多个 mesos 从属进程吗?基本上,我有一些火花工作,不想做资源的静态分区。但是在没有静态分区的情况下使用 mesos 时,似乎会慢很多?

谢谢。

【问题讨论】:

    标签: apache-spark mesos


    【解决方案1】:

    您似乎对两件事感到困惑:在集群中(而不是在本地)启动 Spark 应用程序以及将驱动程序启动到集群中。

    Submitting Applications上方:

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

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

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

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

    【讨论】:

      【解决方案2】:

      我用你的场景来试试,可能可行。 一件事不同,我使用 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
      }
      

      当我得到你的错误日志时,我重新启动机器并重试你的步骤。它也有效。

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-03-02
          • 1970-01-01
          • 1970-01-01
          • 2017-04-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多