基础环境:

Centos 7.5
JDK 1.8.0_212
Zookeeper-3.6.3
JAVA_HOME=/opt/module/jdk1.8.0_212
ZOOKEEPER_HOME=/opt/module/zookeeper-3.6.3

主备规划:

hadoop集群(三台):hadoop102,hadoop103,hadoop104
HA : 103 主, 104 备

步骤:

# 1. 解压 spark 安装包,并重命名
$ tar -zxvf spark-3.0.0-bin-hadoop3.2.tgz -C /opt/module
$ mv /opt/module/spark-3.0.0-bin-hadoop3.2 /opt/module/spark-standalone
-----------------------------------------------------------------

# 2. 修改配置文件 slaves, spark-env.sh 和 spark-defaults.conf

# 2.1 准备三个文件 slaves, spark-env.sh, spark-defaults.conf
$ cd /opt/module/spark-standalone/conf/
$ cp slaves.template slaves
$ cp spark-env.sh.template spark-env.sh
$ cp spark-defaults.conf.template spark-defaults.conf

# 2.2 修改 slaves 文件,添加 work 节点(hosts里面的主机名)
hadoop102
hadoop103
hadoop104

# 2.3 修改 spark-env.sh 文件,添加 JAVA_HOME 环境变量和集群对应的 master 节点
export JAVA_HOME=/opt/module/jdk1.8.0_144
------------------------------------------------------------------

# 3. 配置spark的历史服务

# 3.1 修改 spark-default.conf 文件,配置日志存储路径
# 注意:需要启动 hadoop 集群,HDFS 上的 spark-dir 目录需要提前存在
$ vim spark-default.conf
spark.eventLog.enabled true
spark.eventLog.dir hdfs://hadoop102:8020/spark-dir

# 3.2 修改 spark-env.sh 文件, 添加日志配置
# 此处是hdfs集群的访问地址,我这里hdfs是在hadoop102主机上
$ vim spark-env.sh
export SPARK_HISTORY_OPTS="
-Dspark.history.ui.port=18080
-Dspark.history.fs.logDirectory=hdfs://hadoop102:8020/spark-dir
-Dspark.history.retainedApplications=30"

-------------------------------------------------------------------
# 4. 配置高可用HA

# 4.1 修改 spark-env.sh 文件添加如下配置
#Master 监控页面默认访问端口为 8080,但是可能会和 Zookeeper 冲突,所以改成 8989,也可以自定义,访问 UI 监控页面时请注意
SPARK_MASTER_WEBUI_PORT=8989
export SPARK_DAEMON_JAVA_OPTS="
-Dspark.deploy.recoveryMode=ZOOKEEPER
-Dspark.deploy.zookeeper.url=hadoop102,hadoop103,hadoop104
-Dspark.deploy.zookeeper.dir=/spark"

--------------------以下为自定义脚本启动集群-----------------------
# 5. 分发文件
$ xsync /opt/module/spark-standalone

# 6. 启动hadoop集群
$ myhadoop.sh start

# 7. 启动Zookeeper集群
$ myzookeeper.sh start

------------------------------------------------------------------
# 8. 在hadoop103启动spark集群和历史服务(在哪台机器启动脚本,那台就先被指定为Master)
$ sbin/start-all.sh
$ sbin/start-history-server.sh

# 9. 在hadoop104启动spark-master服务
$ sbin/start-master.sh

# 10. 结束hadoop103上的master进程,过一会儿hadoop104的Master状态为Alive
$ jpsall
$ kill -9 进程号

# 11.在hadoop103再次启动spark-master服务,hadoop103状态为StandBy
$ sbin/start-master.sh

附图:

  1. 103:Alive, 104:StandBy

Spark Standalone(HA)环境搭建_zookeeper

Spark Standalone(HA)环境搭建_zookeeper_02


  1. 103:StandBy, 104:Alive

Spark Standalone(HA)环境搭建_环境搭建_03

Spark Standalone(HA)环境搭建_zookeeper_04