我只有一台机器,想用 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 url,它可以完美地工作:--master mesos://localhost:5050(客户端模式)。根据documentation , Mesos 集群不支持集群模式,但是他们给出了另一个集群模式的指令 here .所以有点困惑?我的问题是:
谢谢。
最佳答案
似乎有两件事让您感到困惑:在集群中启动 Spark 应用程序(而不是在本地)和将驱动程序启动到集群中。
从顶部 Submitting Applications :
The spark-submit script in Spark’s bin directory is used to launch applications on a cluster. It can use all of Spark’s supported cluster managers through a uniform interface so you don’t have to configure your application specially for each one.
因此,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 - 使用 Dispatcher 的 Spark Mesos 集群模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32779516/