StandAlone HA 运行原理
Spark Standalone集群是Master-Slaves架构的集群模式,存在着Master单点故障的问题。
高可用 HA
解决单点故障有两种方案:
基于文件系统的单点恢复(Single-Node Recovery with Local File System):只能用于开发或测试环境
基于zookeeper的Standby Masters(Standby Masters with ZooKeeper): 可用于生产环境
ZooKeeper 提供了一个Leader Election 机制, 利用这个机制可以保证虽然集群存在多个Master,但是只有一个Active的,其他都是Standby。当Active的Master出现故障时,另外的一个Standby Master会被选举出来。由于集群的信息,包括Worker, Driver和Applicaiton 的信息都已经持久化到文件系统,因此在切换的过程中只会影响新的job的提交,对于正在进行的job没有任何的影响。加入ZooKeeper的集群整体架构如下图所示:
高可用HA StandAlone集群搭建
前提: 确保Zookeeper和HDFS均已经启动
修改配置文件即可
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| cd /opt/spark/conf vi spark-env.sh
echo ' ## java安装目录 JAVA_HOME=/opt/java/jdk1.8.0_271 ## HADOOP软件配置文件目录,读取HDFS上文件和运行YARN集群 HADOOP_CONF_DIR=/opt/hadoop/hadoop-3.2.3/etc/hadoop YARN_CONF_DIR=/opt/hadoop/hadoop-3.2.3/etc/hadoop
# ## 指定spark master运行在哪台机器 # export SPARK_MASTER_HOST=master
## 指定spark master的通讯端口 export SPARK_MASTER_PORT=9777 ## 告知spark master的webui 端口 SPARK_MASTER_WEBUI_PORT=9780 ## work cpu可用核数 SPARK_WORKER_CORES=1 ## work 可用内存 SPARK_WORKER_MEMORY=1g ## work 的工作通讯地址 SPARK_WORKER_PORT=9778 ## work 的webui地址 SPARK_WORKER_WEBUI_PORT=9781 ## 设置历史服务器 # 配置的意思是 将spark程序运行的历史日志 存到hdfs的/sparklog文件夹中 SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs://master:9710/sparklog -Dspark.history.fs.cleaner.enabled=true"
SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=master:2181,worker1:2181,worker2:2181 -Dspark.deploy.zookeeper.dir=/spark-ha" ' >> spark-env.sh
scp spark-env.sh 192.168.1.7:/opt/spark/conf/ scp spark-env.sh 192.168.1.9:/opt/spark/conf/
./sbin/stop-all.sh ./sbin/start-all.sh
./sbin/start-master.sh
JPS netstart -anp|grep 34784
|
master注释掉;spark.deploy.recoveryMode 指定HA模式,基于zookeeper实现;指定zookeeper的连接地址;指定zookeeper中注册临时节点的路径。
测试运行
1 2 3 4
| kill -9 JPS查询master_进程ID
|