我只有一台机器,并且希望以mesos集群模式运行spark作业。使用节点集群运行可能更有意义,但是我主要想先测试一下mesos,以检查它是否能够更有效地利用资源(同时运行多个spark作业,而无需进行静态分区)。我尝试了多种方法,但没有成功。这是我所做的:
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
sudo ./sbin/start-mesos-dispatcher.sh --master mesos://localhost:5050
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提供了另一条指令。所以有点令人困惑?我的问题是:
谢谢。
最佳答案
您似乎有两点困惑:在集群中(而不是本地)启动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/