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

  • 生成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
    
  • 运行spark-mesos-dispatcher
    sudo ./sbin/start-mesos-dispatcher.sh --master mesos://localhost:5050
    
  • 使用调度程序作为主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 master网址,则它可以完美地工作:--master mesos://localhost:5050(客户端模式)。根据documentation,Mesos集群不支持集群模式,但是它们为集群模式here提供了另一条指令。所以有点令人困惑?我的问题是:
  • 我如何获得它的作品?
  • 如果直接从主节点提交应用程序/jar,我应该使用客户端模式而不是集群模式吗?
  • 如果我有一台计算机,应该生成1个或多个mesos从属进程。基本上,我有大量的 Spark 工作,并且不想对资源进行静态分区。但是,当使用不带静态分区的mesos时,它似乎要慢得多?

  • 谢谢。

    最佳答案

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

    Submitting Applications的顶部开始:



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

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

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

    关于apache-spark - 使用分派(dispatch)器的Spark Mesos集群模式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32779516/

    10-16 18:38