Spark系列——运行模式(二)standalone模式及其历史服务,HA的配置(详解)

standalone模式

00_前提:

已经安装好java(java1.8.0_241)

已经安装好hadoop(hadoop2.10.0)

01_介绍

我们要构建一个由Master+Slave构成的Spark集群,而Spark就运行在集群中。

在这里插入图片描述

02_standalone开始配置

2.1复制spark,并命名为spark-standalone

cp -r spark-2.4.0-bin-hadoop2.7 spark-startalone

2.2进入conf,配置spark-env.sh,确定master

cd conf
for i in .template; do mv ${i} ${i%.}; done
vi spark-env.sh
SPARK_MASTER_HOST=node1
SPARK_MASTER_PORT=7077

2.3修改slaves文件,确定worker

vi slaves
node1
node2
node3

2.4 在sbin/spark-config.sh文件下添加JAVA_HOME

export JAVA_HOME=/usr/java/jdk1.8.0_241

2.5配置环境变量

vi /etc/profile
export SPARK_HOME=/usr/hadoop/spark-standalone
export PATH=$PATH:$SPARK_HOME/sbin:$SPARK_HOME/bin
source /etc/profile

2.6把spark-standalone分发到集群节点

scp -r spark-standalone / node2:/usr/hadoop/
scp -r spark-standalone / node3:/usr/hadoop/

2.7在spark-standalone下启动集群

sbin/start-all.sh

2.8 spark的standalone集群基本配置完毕

​ 8080端口访问masterUI

​ 8081端口访问workeUI

​ 4040端口driverUI,还没执行完可以看见,如果需要随时可以看见,需要配置历史服务。

2.9 例子1——计算Pi

[root@node1 spark-standalone]# bin/spark-submit \
> --master spark://node1:7077 \
> --class org.apache.spark.examples.SparkPi \
> ./examples/jars/spark-examples_2.11-2.4.0.jar 100

2.10例子2——shell中wordcount

[root@node1 spark-standalone]# bin/spark-shell --master spark://node1:7077

创建一个input目录,写个文件,里面写一些单词,然后在shell里读取,分割,洗牌,统计。和上面local差不多一样。

03_配置历史服务(通用,个别参数根据自己的修改即可)

3.1修改spark-default.conf文件

vi spark-defaults.conf
spark.eventLog.enabled           true
spark.eventLog.dir               hdfs://node1:8020/spark-logs

3.2进入hadoop安装目录后,执行命令:

bin/hadoop fs -mkdir /spark-logs

如果不放心该命令是否执行成功,可启动hadoop,访问50070端口对应的界面查看是否生成了该目录。

 http://192.168.223.100:50070/

3.3修改spark-env.sh文件,添加如下配置

vi spark-env.sh
export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=30 -Dspark.history.fs.logDirectory=hdfs://node1:8020/spark-logs"

​ (1) spark.history.ui.port

​ 历史服务器的WebUI的端口号,默认为18080,也可以自行设置。

​ (2) spark.history.retainedApplications

​ 设置缓存Cache中保存的应用程序历史记录的个数,默认50,如果超过这个值,旧的将被从内存中删除。但并不会从Hdfs中删除。

注:缓存文件数不表示实际显示的文件总数。只是表示不在缓存中的文件可能需要从硬盘读取,速度稍有差别。

​ (3) spark.history.fs.logDirectory

​ 告诉Spark History Server(Spark历史服务)哪个目录记录着任务的日志信息。如果此时文件中配置了该选项,则稍后在启动Spark History Server 时就不必再指定具体目录了。目录可以是Hadoop APIs支持的任意文件系统。

3.4把修改的文件分发给其他虚拟机

scp spark-defaults.conf node2:/usr/hadoop/spark-standalone/conf/
scp spark-defaults.conf node3:/usr/hadoop/spark-standalone/conf/

scp spark-env.sh node2:/usr/hadoop/spark-standalone/conf/
scp spark-env.sh node3:/usr/hadoop/spark-standalone/conf/

3.5启动并查看Spark历史服务

start-dfs.sh
sbin/start-all.sh
sbin/start-history-server.sh 
jps
http://192.168.223.100:18080/

3.6执行一个小任务

bin/spark-submit \
--master spark://node1:7077 \
--deploy-mode cluster \
--class org.apache.spark.examples.SparkPi \
./examples/jars/spark-examples_2.11-2.4.0.jar 10000

04_master-HA

4.1高可用原理

Standalone集群只有一个Master,如果Master挂了就无法提交应用程序,即存在单点故障的问题。需要给Master进行高可用配置,Master的高可用可以使用fileSystem(文件系统)和zookeeper(分布式协调服务)。

(1)基于文件系统的单点恢复—只用于开发或测试环境

fileSystem只有存储功能,可以存储Master的元数据信息,用fileSystem搭建的Master高可用,在Master失败时,需要我们手动启动另外的备用Master,这种方式不推荐使用。

(2)基于zookeeper的Standby Masters—可用于生产环境

zookeeper有选举和存储功能,可以存储Master的元素据信息,使用zookeeper搭建的Master高可用,当Master挂掉时,备用的Master会自动切换,推荐使用这种方式搭建Master的HA。为了使选举没有争议,要奇数个节点。

4.2配置HA

该HA方案使用起来很简单,首先启动一个ZooKeeper集群,然后在不同节点上启动Master,注意这些节点需要具有相同的zookeeper配置。

4.2.1修改spark-env.sh 文件

vi spark-env.sh
#SPARK_MASTER_HOST=node1
#SPARK_MASTER_PORT=7077

export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=30 -Dspark.history.fs.logDirectory=hdfs://node1:8020/spark-logs"

export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=node1:2181,node2:2181,node3:2181 -Dspark.deploy.zookeeper.dir=/spark-nodes"

​ spark.deploy.recoveryMode:恢复模式
​ spark.deploy.zookeeper.url:ZooKeeper的Server地址
​ spark.deploy.zookeeper.dir:保存集群元数据信息的文件、目录。包括 Worker、Driver、Application信息。

4.2.2分发上面这个配置文件

scp spark-env.sh node2:/usr/hadoop/spark-standalone/conf/
scp spark-env.sh node3:/usr/hadoop/spark-standalone/conf/

4.2.3启动spark服务

start-dfs.sh
start-yarn.sh
sbin/start-all.sh
sbin/start-history-server.sh
zkServer.sh start
sbin/start-master.sh	 

4.3查看服务

​ 访问master的spark管理界面是活跃的,而另一台master是待定的,假如第一台宕机,zookeeper安排第二台走马上任。

http://192.168.223.100:8080/
http://192.168.223.101:8080/

4.4 测试HA

测试主备切换

  1. 在第一台master上使用jps查看master进程id
  2. 使用kill -9 id号强制结束该进程
  3. 稍等片刻后刷新第二台master的web界面发现第二台master为Alive

4.5执行小任务

4.5.1词频统计

bin/spark-shell --master spark://node1:7077,node2:7077,node3:7077

后面的同local下那个类似,如有疑问,参考另一篇spark系列——运行模式1:local模式配置

4.5.2例子计算

bin/spark-submit \
> --master spark://node1:7077,node2:7077,node3:7077 \
> --deploy-mode client \
> --class org.apache.spark.examples.SparkPi \
> ./examples/jars/spark-examples_2.11-2.4.0.jar 100

4.5.3例子计算

bin/run-example --master spark://node1:7077,node2:7077,node3:7077 SparkPi

注:例子是自带的

猜你喜欢

转载自blog.csdn.net/qq_46009608/article/details/108910867
今日推荐