高可用的Spark集群介绍
1、spark的主备切换过程需要做哪些工作?
①、zookeeper将备用master的状态更改为alive。
②、备用master从zookeeper拉取元数据。
③、备用master向worker节点发送信息,通知已经更换了master。
2、master主备切换过程中,能不能提交一个新的Application?
不能,因为此时旧的master已经挂掉了,而新的master还没准备好(RECOVER)。
3、如果已经有一个Application已经在集群中运行了,那么此时进行主备切换,对这个Application有没有影响?
没有影响,spark是粗粒度的资源调度,在任务运行之前已经找master为Application申请好资源了,Application运行时已经不需要master了。
高可用的Spark集群搭建
高可用的spark集群与spark集群的搭建很相似,只是修改一个配置文件。所以执行下面的步骤之前,请确保你已经安装了spark集群,若未安装,请按照spark集群搭建进行搭建。
由于 高可用的spark集群的主备切换需要依赖zookeeper集群,所以还应该提前安装好zookeeper集群。由于我之前已经安装过,这里就不安装了
若上面两个上面前提条件都已经解决,接下来可以进行高可用的Spark集群的改造了。
1、进入spark安装包的conf目录下,修改spark-env.sh文件。
2、在spark-env.sh中修改成下面这种内容。(如果已经搭建好Spark集群,则下面的内容,你应该只需要最后一行,具体情况请自行比对分析)
SPARK_MASTER_IP=node01
SPARK_MASTER_PORT=7077
SPARK_WORKER_CORES=3
SPARK_WORKER_MEMORY=2g
SPARK_WORKER_DIR=/opt/software/spark/spark-1.6.3/work
SPARK_WORKER_INSTANCES=1
SPARK_MASTER_WEBUI_PORT=8888
SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=node02:2181,node03:2181,node04:2181 -Dspark.deploy.zookeeper.dir=/spark-1106"
3、把配置好的spark-env.sh推送到其他节点。使用命令如下:
4、选择一台节点作为备用master节点,若选择node02,那么在node02节点把SPARK_MASTER_IP的值改为node02。
5、启动zookeeper,在node02,node03,node04节点分别启动zookeeper。
6、在node01启动spark集群。
7、在node02的spark的sbin目录下启动备用master。
8、在webui查看启动的页面。
9、接下来测试集群是不是高可用的集群。把node01的master杀死,看node02是不是会自动改变状态。
10、node02状态自动切换成功,说明高可用的spark集群配置成功!