Spark集群HA环境搭建教程

首先搭建Spark集群,我们用时Spark的原生的安装包,之前的环境还是我前面搭建起来的Hadoop的环境,话不多说,我们开始搭建环境。
Spark 集群安装 :

spark官网首页:http://spark.apache.org/downloads.html

Spark集群HA环境搭建教程

或者其他镜像站:
https://mirrors.tuna.tsinghua.edu.cn/apache/spark/ https://www.apache.org/dyn/closer.lua/spark/spark-2.3.0/spark-2.3.0-bin-hadoop2.7.tgz https://www.apache.org/dyn/closer.lua/spark/

我们选择的版本:spark-2.3.0-bin-hadoop2.7.tgz

1.普通Spark 分布式集群

详细安装步骤:
Spark-2.3 需要依赖:Java 8+ 和 Python 2.7+/3.4+ 和 Scala 2.11 和 R 3.1+ 一般需要安装JDK和Scala

1、上传下载好的 Spark 到集群中的一个节点,比如是 hadoop05 put c:/spark-2.3.0-bin-hadoop2.7.tgz

2、使用之前安装 hadoop 集群相同的 hadoop 用户安装 spark 集群,现在规划安装目录 /home/hadoop/apps/,解压缩进行安装: tar -zxvf spark-2.3.0-bin-hadoop2.7.tgz -apps /home/hadoop/apps/

3、修改配置文件 spark-env.sh 进入 SPARK_HOME 的 conf 目录中,进行如下更改: cd /home/hadoop/apps/spark-2.3.0-bin-hadoop2.7/conf mv spark-env.sh.template spark-env.sh 然后修改 spark-env.sh: export JAVA_HOME=/usr/local/java/jdk1.8.0_73 export SPARK_MASTER_HOST=hadoop02 export SPARK_MASTER_PORT=7077

4、修改配置文件 slave 进入 SPARK_HOME 的 conf 目录中,进行如下更改: cd /home/hadoop/apps/spark-2.3.0-bin-hadoop2.7/conf mv slaves.template slaves 在 slaves 的最后添加所有 worker 节点的主机名 hadoop02 hadoop03 hadoop04 hadoop05

5、将 spark 安装包 copy 到所有安装节点 scp -r spark-2.3.0-bin-hadoop2.7 hadoop02:/home/hadoop/apps/ scp -r spark-2.3.0-bin-hadoop2.7 hadoop03:/home/hadoop/apps/ scp -r spark-2.3.0-bin-hadoop2.7 hadoop04:/home/hadoop/apps/

6、配置环境变量 vim ~/.bashrc export SPARK_HOME=/home/hadoop/apps/spark-2.3.0-bin-hadoop2.7 export PATH=PATH:PATH:SPARK_HOME/bin:$SPARK_HOME/sbin source ~/.bashrc 千万注意:HADOOP_HOME/sbin 和 SPARK_HOME/sbin 目录中都包含 start-all.sh 和 stopall.sh 脚本。所以会有冲突。所以在使用有冲突的命令等要千万注意。 如果区分不清楚,那么不推荐配置环境变量

7、启动 Spark 集群 [[email protected] ~]$ cd /home/hadoop/apps/spark-2.3.0-bin-hadoop2.7 [[email protected] spark-2.3.0-bin-hadoop2.7]$ sbin/start-all.sh

Spark集群HA环境搭建教程

8、验证集群启动是否成功 8.1、验证每个节点上的对应进程是否都启动正常
8.1、验证每个节点上的对应进程是否都启动正常
Spark集群HA环境搭建教程
8.2、验证 Spark Web UI 打开浏览器访问:http://hadoop02:8080/ hadoop02 就是 master 所在的服务器
Spark集群HA环境搭建教程

8.3、测试能否运行一个 Spark 例子程序 提交一个 spark 程序: [[email protected] ~]$ run-example SparkPi 10 最后结果:
Spark集群HA环境搭建教程
或者:
[[email protected] ~]$ ~/apps/spark-2.3.0-bin-hadoop2.7/bin/spark-submit \ --class org.apache.spark.examples.SparkPi \ --master spark://hadoop02:7077 \ --executor-memory 512m \ --total-executor-cores 1 \ ~/apps/spark-2.3.0-bin-hadoop2.7/examples/jars/spark-examples_2.11-2.3.0.jar \ 100

–master spark://hadoop02:7077 指定 Master 的地址 --executor-memory 512m 指定每个 worker 可用内存为 500m --total-executor-cores 1 指定整个集群使用的 CPU 核数为 1 个

或者
进入 Spark Shell: [[email protected] ~] spark-shell 或者 [[email protected] ~]$ ~/apps/spark-2.3.0-bin-hadoop2.7/bin/spark-shell \ > --master spark://hadoop02:7077 \ > --executor-memory 512m \ > --total-executor-cores 1
执行程序: sc.textFile("/home/hadoop/words.txt").flatMap(.split(" ")) .map((,1)).reduceByKey(+).foreach(println)
Spark集群HA环境搭建教程
注意: 如果启动 Spark Shell 时没有指定 master 地址,但是也可以正常启动 Spark Shell 和执行 Spark Shell 中的程序,其实是启动了 Spark 的 local 模式,该模式仅在本机启动一个进程,没有与 集群建立联系。 Spark Shell 中已经默认将 SparkContext 类初始化为对象 sc。用户代码如果需要用到,则直接 应用 sc 即可。 Spark Shell 中已经默认将 Spark Session 类初始化为对象 spark。用户代码如果需要用到,则 直接应用 spark 即可

**

2.Spark 高可用集群

**
在上面的 4.6.1 中的安装的 Spark 集群是一个普通的分布式集群,存在 master 节点的单点故 障问题。Hadoop 在 2.X 版本开始,已经利用 ZooKeeper 解决了单点故障问题。同样的策略, Spark 也利用 ZooKeeper 解决 Spark 集群的单点故障问题

具体步骤:
1、停止 Spark 集群 [[email protected] ~]$ cd /home/hadoop/apps/spark-2.3.0-bin-hadoop2.7 [[email protected] ~]$ sbin/stop-all.sh

2、配置 ZooKeeper 集群,并且启动好 ZooKeeper 集群

3、修改 SPARK_HOME/conf 目录中的 spark-env.sh 配置文件: 删掉: export SPARK_MASTER_HOST=hadoop02 增加一行: export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER Dspark.deploy.zookeeper.url=hadoop02,hadoop03,hadoop04 Dspark.deploy.zookeeper.dir=/spark"

解释: -Dspark.deploy.recoveryMode=ZOOKEEPER 说明整个集群状态是通过zookeeper来维护的,整个集群状态的恢复也是通过zookeeper 来维护的。就是说用 zookeeper 做了 Spark 的 HA 配置,Master(Active)挂掉的话, Master(standby)要想变成 Master(Active)的话,Master(Standby)就要像 zookeeper 读取 整个集群状态信息,然后进行恢复所有 Worker 和 Driver 的状态信息,和所有的 Application 状态信息

-Dspark.deploy.zookeeper.url=hadoop2:hadoop03:hadoop04 #将所有配置了 zookeeper,并且在这台机器上有可能做 master(Active)的机器都配置进 来(我用了 3 台,就配置了 3 台)

-Dspark.deploy.zookeeper.dir=/spark 这里的 dir 和 zookeeper 配置文件 zoo.cfg 中的 dataDir 的区别??? -Dspark.deploy.zookeeper.dir 是保存 spark 的元数据,保存了 spark 的作业运行状态; zookeeper 会保存 spark 集群的所有的状态信息,包括所有的 Workers 信息,所有的 Applactions 信息,所有的 Driver 信息,如果集群

4、如果是高可用的 Hadoop 集群,一定要把 core-site.xml 和 hdfs-site.xml 放置在 $SPARK_HOME/conf 目录中。然后所有节点要同步

5、同步配置文件 [[email protected] conf]$ scp -r spark-env.sh hadoop03:PWD[hadoop@hadoop02conf]PWD [[email protected] conf] scp -r spark-env.sh hadoop04:PWD[hadoop@hadoop02conf]PWD [[email protected] conf] scp -r spark-env.sh hadoop05:$PWD

6、启动集群 在 hadoop02 上执行: [[email protected] ~]$ cd /home/hadoop/apps/spark-2.3.0-bin-hadoop2.7 [[email protected] spark-2.3.0-bin-hadoop2.7]$ sbin/start-all.sh

Spark集群HA环境搭建教程
7、验证高可用 这是正常情况: Hadoop02 是 spark 集群的 active master 节点 Hadoop04 是 spark 集群的 standby master 节点
通过杀掉 active master 观察是否 hadoop04 能启动切换为 active 状态。
Spark集群HA环境搭建教程

结果:
Spark集群HA环境搭建教程