1.启动HDFS
【在NameNode所在节点下启动dfs】
sbin/start-dfs.sh
2.停止spark所有服务
- 进入到spark安装目录,停止spark所有服务【关闭历史服务器,关闭集群节点】
sbin/stop-history-server.sh
sbin/stop-all.sh
-----------------------------
sbin/stop-slaves.sh
sbin/stop-master.sh
注意:集群操作顺序
- 先启动master,再启动slaves
- 先停止slaves,再停止master
3.修改spark配置文件
- 进入到conf目录,修改配置文件:spark-env.sh
vim spark-env.sh
- 注释掉SPARK_MASTER_HOST=master01
# 配置Spark HA,需要注释掉SPARK_MASTER_HOST=master01
# SPARK_MASTER_HOST=master01
- 添加Zookeeper配置
# 配置Spark HA,配置Zookeeper集群:ZOOKEEPER;Zookeeper的地址(配置好的zookeeper url,master01,slave01,slave02);目录(随便)
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=master01:2181,slave01:2181,slave02:2181 -Dspark.deploy.zookeeper.dir=/spark"
- 将更改后的配置文件发布给slave01和slave02
scp spark-env.sh slave01:/opt/module/spark-2.1.1-bin-hadoop2.7/conf/
scp spark-env.sh slave02:/opt/module/spark-2.1.1-bin-hadoop2.7/conf/
发布完成后,可到slave01和slave02用cat命令查看一下是否成功,即配置文件内容是否被更改
tips:【Xshell】通过“工具”中“发送键输入到所有会话”可以控制所有会话窗口的命令
4.启动zookeeper
- 所有会话一起进入到zookeeper安装目录【三台服务器同时操作】
cd /opt/module/zookeeper-3.4.10
- 启动zookeeper
bin/zkServer.sh start
- 查看状态
bin/zkServer.sh status
---------------------------------------------------
master01:follower; slave01:follower; slave02:leader
5.启动Spark集群
- master01,在spark安装目录下,启动集群【master01下有master进程,slave01和slave02下有worker进程】
sbin/start-all.sh
- slave01,在spark安装目录下,手动启动master【此时,slave01下既有worker进程,又有master进程】
sbin/start-master.sh
6.程序中spark集群的访问地址需要更改
spark://master01:port1,master02:port2
- 启动spark集群
[lsy@master01 spark-2.1.1-bin-hadoop2.7]$ bin/spark-shell --master spark://master01:7077,slave01:7077
- 在scala命令行下进行wordcount
scala> sc.textFile("./LICENSE").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect
- 开始时,master01掌握控制权,可以在master01:8080下看到集群状态
- kill掉master01的master进程后,控制权交给了slave01【kill -9 master进程号】
- 再次执行wordcount,可以在slave01:8080下看到集群状态
- master01再手动启动sbin/start-master.sh,控制权仍然在slave01节点