Spark on Mesos cluster mode

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:

《Spark on Mesos cluster mode》 这里写图片描述

提交任务测试:

/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:

《Spark on Mesos cluster mode》 这里写图片描述

4. FAQ :

  1. 无法识别启动时提交的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

  2. 存在单点问题

    MesosClusterDispatcher现在不支持启动多个实例保证HA。
    同时启动Dispatcher时无法使用mesos://zk://...进行提交,只能使用mesos://hostName:5050的方式。

5. 结语

原生的MesosClusterDispatcher目前还不适合生产环境使用。

    原文作者:breeze_lsw
    原文地址: https://www.jianshu.com/p/5d8c090a3898
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞