1. cluster mode
spark cluster mode指的是将driver运行在cluster而不是client中。可以使用surpervise
机制,指的是driver会自动的进行失败重试。
2. mesos-dispatcher
如果要在mesos中使用cluster模式,必须先开启mesos-dispatcher
服务。
启动mesos-dispatcher
sudo -u admin /usr/install/spark/sbin/start-mesos-dispatcher.sh \
-m mesos://192.168.6.52:5050 \
-z 192.168.6.55:2181,192.168.6.56:2181,192.168.6.57:2181
可以在8081端口中看到web ui:
提交任务测试:
/usr/install/spark/bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master mesos://192.168.6.53:7077 \
--deploy-mode cluster \
--surpervise \
hdfs://tdhdfs/lib/spark-examples-1.6.2-hadoop2.4.1.jar \
100
note: jar包必须可以通过网络获取到,比如 http://, hdfs:// 或 s3n://
启动surpervisor的driver只能通过kill
命令关闭
./bin/spark-submit --master mesos://192.168.6.52:7077 --kill $driverId
查看任务状态:
/usr/install/spark/bin/spark-status --master mesos://192.168.6.52:7077 --kill driver-20160822120724-0002
3. 在marathon上运行dispatcher
优点:
- 便于管理
- 状态检测(服务失败重启等)
启动mesos dispatcher
mesos的cmd中增加
/usr/install/spark/bin/spark-class org.apache.spark.deploy.mesos.MesosClusterDispatcher \
-m mesos://192.168.6.52:5050 \
-z 192.168.6.55:2181,192.168.6.56:2181,192.168.6.57:2181
将dispatcher服务运行在指定节点中:
//将任务运行在dp0652中
"constraints": [["hostname", "CLUSTER", "dp0652"]]
marathon web ui:
4. FAQ :
-
无法识别启动时提交的role
启动role时,配置--conf spark.mesos.role=production
不生效,所以无法申请到资源,报错提示如下:
State: TASK_ERROR, Message: Task uses more resources cpus():1; mem():1024 than available cpus(test):4; mem(*):20480;这个目前还没有发现解决方法,在下面这个issues中也有人遇到相同的问题,不过没人做出回复:
Support framework authentication and role in Mesos framework -
存在单点问题
MesosClusterDispatcher
现在不支持启动多个实例保证HA。
同时启动Dispatcher
时无法使用mesos://zk://...
进行提交,只能使用mesos://hostName:5050
的方式。
5. 结语
原生的MesosClusterDispatcher目前还不适合生产环境使用。