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

2.5 Spark集群搭建与测试

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

由于Spark本身是用Scala语言写的,运行在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版本为3.2.1,包类型为Pre-built for Apache Hadoop 3.3 and later(Hadoop 3.3及以后的预编译版本)。

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

    $ tar -zxvf spark-3.2.1-bin-hadoop3.2.tgz -C /opt/modules/

然后进入目录/opt/modules/中,重命名Spark安装目录:

    $ mv spark-3.2.1-bin-hadoop3.2/ spark

2.修改配置文件

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

(1)修改workers文件

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

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

    $ cp workers.template workers

然后修改workers文件,将其中默认的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/ hadoop@centos02:/opt/modules/
    $ scp -r /opt/modules/spark/ 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-workers.sh

可以看到,当执行start-all.sh命令时,会分别执行start-master.sh命令启动Master,执行start-workers.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-3.3.1
    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/examples/jars/spark-examples_2.12-3.2.1.jar

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

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

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

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

可看到输出结果如下:

    Pi is roughly 3.144715723578618

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

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-14所示。

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

图2-14 Spark HA架构图

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

具体搭建步骤如下:

步骤01 停止Spark集群。命令如下:

    $ sbin/stop-all.sh

步骤02 修改配置文件。在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/conf/
    $ scp conf/spark-env.sh hadoop@centos03:/opt/modules/spark/conf/

步骤03 启动ZooKeeper集群。

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

    $ sbin/start-all.sh

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

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

    $ sbin/start-master.sh

步骤05 查看各节点的进程。在各节点执行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

步骤06 测试Spark HA。可以进入Spark Web界面查看两个Master的状态。默认Master的Web界面访问端口为8080,若与其他程序端口冲突(例如8080端口可能与ZooKeeper冲突),可以在Spark的配置文件spark-env.sh中添加以下内容,更改Master的Web界面访问端口(例如更改为8070):

    SPARK_MASTER_WEBUI_PORT=8070

若更改了Web界面的访问端口,需重新启动Spark集群。

此时centos01节点Master的状态为ALIVE(即Active,活动状态),如图2-15所示。

图2-15 centos01节点的Master状态

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

图2-16 centos02节点的Master状态

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

图2-17 RECOVERING状态的Master

图2-18 ALIVE状态的Master

到此,Spark HA搭建完成。

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

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