购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.5 Spark集群搭建与测试

本节使用3个节点centos01、centos02和centos03讲解Spark的两种集群运行模式:Spark Standalone模式和Spark On YARN模式的集群搭建。Standalone模式需要启动Spark集群,而Spark On YARN模式不需要启动Spark集群,只需要启动YARN集群即可。

由于Spark本身是用Scala语言写的,运行在Java虚拟机(JVM)上,因此在搭建Spark集群环境之前需要先安装好JDK,建议JDK版本在1.8以上。JDK的安装此处不做讲解。

2.5.1 Spark Standalone模式的集群搭建

Spark Standalone模式的集群搭建需要在集群的每个节点都安装Spark,集群角色分配如表2-1所示。

表2-1 Spark集群角色分配

集群搭建的操作步骤如下:

1.下载解压安装包

访问Spark官网(http://spark.apache.org/downloads.html)下载预编译的Spark安装包,选择Spark版本为2.4.0,包类型为Pre-built for Apache Hadoop 2.7 and later(Hadoop 2.7及之后版本的预编译版本)。

将下载的安装包spark-2.4.0-bin-hadoop2.7.tgz上传到centos01节点的/opt/softwares目录,然后进入该目录,执行以下命令,将其解压到目录/opt/modules中。

$ tar -zxvf spark-2.4.0-bin-hadoop2.7.tgz -C /opt/modules/
2.修改配置文件

Spark的配置文件都存放于安装目录下的conf目录,进入该目录,执行以下操作:

(1)修改slaves文件

slaves文件必须包含所有需要启动的Worker节点的主机名,且每个主机名占一行。

执行以下命令,复制slaves.template文件为slaves文件:

$ cp slaves.template slaves

然后修改slaves文件,将其中默认的localhost改为以下内容:

centos02
centos03

上述配置表示将centos02和centos03节点设置为集群的从节点(Worker节点)。

(2)修改spark-env.sh文件

执行以下命令,复制spark-env.sh.template文件为spark-env.sh文件:

$ cp spark-env.sh.template spark-env.sh

然后修改spark-env.sh文件,添加以下内容:

export JAVA_HOME=/opt/modules/jdk1.8.0_144
export SPARK_MASTER_HOST=centos01
export SPARK_MASTER_PORT=7077

上述配置属性解析如下:

● JAVA_HOME:指定JAVA_HOME的路径。若集群中每个节点在/etc/profile文件中都配置了JAVA_HOME,则该选项可以省略,Spark集群启动时会自动读取。为了防止出错,建议此处将该选项配置上。

● SPARK_MASTER_HOST:指定集群主节点(Master)的主机名,此处为centos01。

● SPARK_MASTER_PORT:指定Master节点的访问端口,默认为7077。

3.复制Spark安装文件到其他节点

在centos01节点中执行以下命令,将Spark安装文件复制到其他节点:

    $ scp -r /opt/modules/spark-2.4.0-bin-hadoop2.7/
hadoop@centos02:/opt/modules/
    $ scp -r /opt/modules/spark-2.4.0-bin-hadoop2.7/
hadoop@centos03:/opt/modules/
4.启动Spark集群

在centos01节点上进入Spark安装目录,执行以下命令,启动Spark集群:

$ sbin/start-all.sh

查看start-all.sh的源码,其中有以下两条命令:

# Start Master
"${SPARK_HOME}/sbin"/start-master.sh

# Start Workers
"${SPARK_HOME}/sbin"/start-slaves.sh

可以看到,当执行start-all.sh命令时,会分别执行start-master.sh命令启动Master,执行start-slaves.sh命令启动Worker。

注意,若spark-evn.sh中配置了SPARK_MASTER_HOST属性,则必须在该属性指定的主机上启动Spark集群,否则会启动不成功;若没有配置SPARK_MASTER_HOST属性,则可以在任意节点上启动Spark集群,当前执行启动命令的节点即为Master节点。

启动完毕后,分别在各节点执行jps命令,查看启动的Java进程。若在centos01节点存在Master进程,centos02节点存在Worker进程,centos03节点存在Worker进程,则说明集群启动成功。

此时可以在浏览器中访问网址http://centos01:8080,查看Spark的WebUI,如图2-10所示。

图2-10 Spark WebUI

2.5.2 Spark On YARN模式的集群搭建

Spark On YARN模式的搭建比较简单,仅需要在YARN集群的一个节点上安装Spark即可,该节点可作为提交Spark应用程序到YARN集群的客户端。Spark本身的Master节点和Worker节点不需要启动。

使用此模式需要修改Spark配置文件$SPARK_HOME/conf/spark-env.sh,添加Hadoop相关属性,指定Hadoop与配置文件所在目录,内容如下:

export HADOOP_HOME=/opt/modules/hadoop-2.8.2
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

修改完毕后,即可运行Spark应用程序。例如,运行Spark自带的求圆周率的例子(注意提前将Hadoop HDFS和YARN启动),并且以Spark On YARN的cluster模式运行,命令如下:

    $ bin/spark-submit \
    --class org.apache.spark.examples.SparkPi \
    --master yarn \
    --deploy-mode cluster \
    /opt/modules/spark-2.4.0-bin-hadoop2.7/examples/jars/spark-examples_2.11-2
.4.0.jar

程序执行过程中,可在YARN的ResourceManager对应的WebUI中查看应用程序执行的详细信息,如图2-11所示。

图2-11 查看应用程序运行状态

Spark On YARN的cluster模式运行该例子的输出结果不会打印到控制台中,可以在图2-11的WebUI中单击application Id,在Application详情页面的最下方单击Logs超链接,然后在新页面中单击stdout所属超链接,即可显示输出日志,而运行结果则在日志中,整个查看日志的过程如图2-12~2-14所示。

图2-12 查看应用程序输出日志步骤1

图2-13 查看应用程序输出日志步骤2

图2-14 查看应用程序输出日志步骤3

2.5.3 Spark HA的搭建

Spark Standalone和大部分Master/Slave模式一样,都存在Master单点故障问题,解决方式是基于ZooKeeper实现两个Master无缝切换,类似HDFS的NameNode HA(High Availability,高可用)或YARN的ResourceManager HA。

Spark可以在集群中启动多个Master,并使它们都向ZooKeeper注册,ZooKeeper利用自身的选举机制保证同一时间只有一个Master是活动状态(active)的,其他的都是备用状态(Standby)的。

当活动状态的Master出现故障时,ZooKeeper会从其他备用状态的Master选出一台成为活动Master,整个恢复过程大约在1分钟之内。对于恢复期间正在运行的应用程序,由于应用程序在运行前已经向Master申请了资源,运行时Driver负责与Executor进行通信,管理整个应用程序,因此Master的故障对应用程序的运行不会产生影响,但是会影响新应用程序的提交。

以Spark Standalone模式的client提交方式为例,其HA的架构如图2-15所示。

图2-15 Spark HA架构图

下面接着2.5.1小节搭建好的Spark Standalone集群继续进行Spark HA的搭建,搭建前的角色分配如表2-2所示。

表2-2 Spark HA集群角色分配

具体搭建步骤如下:

1.停止Spark集群
$ sbin/stop-all.sh
2.修改配置文件

在centos01节点中修改Spark配置文件spark-env.sh,删除其中的SPARK_MASTER_IP属性配置,添加以下配置:

    export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER
-Dspark.deploy.zookeeper.url=centos01:2181,centos02:2181,centos03:2181
-Dspark.deploy.zookeeper.dir=/spark"

上述配置参数解析如下:

● spark.deploy.zookeeper.url:指定ZooKeeper集群各节点的主机名与端口。

● spark.deploy.zookeeper.dir:指定Spark在ZooKeeper中注册的znode节点名称。

然后同步修改后的配置文件到集群其他节点,命令如下:

    $ scp conf/spark-env.sh
hadoop@centos02:/opt/modules/spark-2.4.0-bin-hadoop2.7/conf/
    $ scp conf/spark-env.sh
hadoop@centos03:/opt/modules/spark-2.4.0-bin-hadoop2.7/conf/
3.启动ZooKeeper集群
4.启动Spark集群

在centos01节点上进入Spark安装目录,启动Spark集群,命令如下:

$ sbin/start-all.sh

需要注意的是,在哪个节点上启动的Spark集群,活动状态的Master就存在于哪个节点上。

在centos02节点上进入Spark安装目录,启动第二个Master(备用状态Master),命令如下:

$ sbin/start-master.sh
5.查看各节点的进程

在各节点执行jps命令查看启动的Java进程:

centos01节点:

$ jps
5825 QuorumPeerMain
6105 Master
6185 Jps

centos02节点:

$ jps
6115 Jps
5701 QuorumPeerMain
5974 Worker
6056 Master

centos03节点:

$ jps
5990 Jps
5913 Worker
5645 QuorumPeerMain
6.测试Spark HA

进入Spark WebUI查看两个Master的状态,此时centos01节点Master的状态为ALIVE(Active,活动状态),如图2-16所示。

图2-16 centos01节点Master状态

centos02节点Master的状态为STANDBY(备用状态),如图2-17所示。

图2-17 centos02节点Master状态

使用kill -9命令杀掉centos01节点的Master进程,稍等几秒后多次刷新centos02节点的WebUI,发现Master的状态由STANDBY首先变为了RECOVERING(恢复,该状态持续时间非常短暂),最后变为了ALIVE,如图2-18和图2-19所示。

图2-18 RECOVERING状态的Master

图2-19 ALIVE状态的Master

至此,Spark HA搭建完成。

此时若需要连接Spark集群执行操作,则--master参数的连接地址需改为spark://centos02:7077,例如以下代码: t8Unwy8W5usYudjwS57Hknede3PZxSJd+HHTqNNbfO9nTLBwstogGBD3FN/5vXEy

$ bin/spark-shell \
--master spark://centos02:7077
点击中间区域
呼出菜单
上一章
目录
下一章
×