Spark大数据分析与实战笔记(第二章 Spark基础-02)

每日一句正能量

人生就像赛跑,不在乎你是否第一个到达尽头,而在乎你有没有跑完全程。

章节概要

Spark于2009年诞生于美国加州大学伯克利分校的AMP实验室,它是一个可应用于大规模数据处理的统一分析引擎。Spark不仅计算速度快,而且内置了丰富的API,使得我们能够更加容易编写程序。

2.2 搭建Spark开发环境

请参考《Hadoop大数据技术与应用》完成Hadoop集群构建。或者看我之前的博客也行。

搭建Spark环境是开展Spark编程的基础,在深入学习Spark编程之 前,我们需要的先搭建Spark开发环境。

2.2.1 环境准备

由于Spark仅仅是一种计算框架,不负责数据的存储和管理,因此,通常都会将Spark和Hadoop进行统一部署,由Hadoop中的HDFS、HBase等组件负责数据的存储管理,Spark负责数据计算。

安装Spark集群前,需要安装Hadoop环境,本教材采用如下配置环境。

Linux系统:CentOS_6.7版本
Hadoop:2.7.4版本
JDK:1.8版本
Spark:2.3.2版本

2.2.2 Spark的部署方式

Spark部署模式分为Local模式(本地单机模式)和集群模式,在Local模式下, 常用于本地开发程序与测试,而集群模式又分为Standalone模式(集群单机模式)、 Yarn模式和Mesos模式,关于这三种集群模式的相关介绍具体如下:

  1. Standalone模式

    • Standalone模式被称为集群单机模式
    • 在该模式下,Spark集群架构为主从模式,即一台Master节点与多台Slave节点,Slave节点启动的进程名称为Worker。(主节点只有一个,所以存在单点故障问题,要搭建高可用的Spark集群)
  2. Mesos模式

    • Mesos模式被称为Spark on Mesos模式。
    • Mesos是一款资源调度管理系统,为Spark提供服务,由于Spark与Mesos存在密切的关系,因此在设计Spark框架时充分考虑到对Mesos的集成。但如果你同时运行Hadoop和Spark,从兼容性的角度来看,Spark on Yarn是更好的选择。
  3. Yarn模式

    • Yarn模式被称为Spark on Yarn模式,即把Spark作为一个客户端,将作业提交给Yarn服务。
    • 由于在生产环境中,很多时候都要与Hadoop使用同一个集群,因此采用Yarn来管理资源调度,可以提高资源利用率。

Yarn模式又分为Yarn Cluster模式和Yarn Client模式,具体介绍如下:

  • Yarn Cluster: 用于生产环境,所有的资源调度和计算都在集群上运行。
  • Yarn Client: 用于交互、调试环境。

2.2.3 Spark集群安装部署

  • 本书将在Standalone模式下,进行Spark集群的安装部署。
  • 规划的Spark集群包含一台Master节点和两台Slave节点。其中,主机名hadoop01是Master节点,hadoop02和hadoop03是Slave节点。如下图所示:
    在这里插入图片描述
一、Spark下载
  1. 下载Spark安装包

进入后来到Spark的官网,点击【Download】就可以打开下载界面:https://spark.apache.org/downloads.html
在这里插入图片描述
Spark安装包的下载页面如下图所示:
在这里插入图片描述
可以将页面向下拉,找到【Spark release archives】点击进去找历史版本下载。
在这里插入图片描述
在这里插入图片描述

二、Spark安装
  1. 解压Spark安装包
    首先将下载的spark-2.3.2-bin-hadoop2.7.tgz安装包上传到主节点hadoop01的/export/software目录下,然后解压到/export/servers/目录,解压命令如下。

$ tar -zxvf spark-2.3.2-bin-hadoop2.7.tgz -C /export/servers/

注:命令前面的 $ 符号表示当前用户的命令行提示符。它通常出现在命令的开头,表示这是一条需要在命令行中运行的命令。执行命令时不需要加上这个符号,否则会报错。

为了便于后面操作,我们使用mv命令将Spark的目录重命名为spark,命令如下。
mv spark-2.3.2-bin-hadoop2.7/ spark

  1. 修改配置文件
    (1)进入spark/conf目录修改Spark的配置文件spark-env.sh,将spark-env.sh.template配置模板文件复制一份并命名为spark-env.sh,具体命令如下。
    cp spark-env.sh.template spark-env.sh

(2)修改spark-env.sh文件,在该文件添加以下内容:

#配置java环境变量
export JAVA_HOME=/export/servers/jdk
#指定Master的IP
export SPARK_MASTER_HOST=hadoop01
#指定Master的端口 
export SPARK_MASTER_PORT=7077

上述添加的配置参数主要包括JDK环境变量、Master节点的IP地址和Master端口号,由于当前节点服务器已经在/etc/hosts文件中配置了IP和主机名的映射关系,因此可以直接填写主机名。

(3)复制slaves.template文件,并重命名为slaves 。具体命令如下。
cp slaves.template slaves

(4)修改spark-env.sh文件,在该文件添加以下内容:通过“vi slaves”命令编辑slaves配置文件,主要是指定Spark集群中的从节点IP,由于在hosts文件中已经配置了IP和主机名的映射关系,因此直接使用主机名代替IP,添加内容如下。

hadoop02
hadoop03
  1. 分发文件
    修改完成配置文件后,将spark目录分发至hadoop02和hadoop03节点 。命令如下。
$ scp -r /export/servers/spark/ hadoop02:/export/servers/
$ scp -r /export/servers/spark/ hadoop03:/export/servers/
三、环境变量配置

为了在任何路径下可以执行Spark脚本程序,可以通过执行“vi /etc/profile’命令编辑 .bashrc或者 profile文件,并在文件中配置Spark环境变量即可。文件中添加以下内容:

export SPARK_HOME=/export/servers/spark
export PATH=$PATH:$SPARK_HOME/bin

至此,Spark集群配置完成了 。

  1. 启动Spark集群
    Spark集群的启动方式和启动Hadoop集群方式类似,直接使用spark/sbin/start- al.sh脚本即可,在spark根目录下执行下列命令:
    $ sbin/start-all.sh
    在这里插入图片描述
    可以看到集群进程被启动了。
    在这里插入图片描述
    访问Spark管理界面http://hadoop01:8080来查看集群状态(主节点), Spark集群管理界面如下图所示。
    在这里插入图片描述

2.2.4 Spark HA集群部署

Spark Standalone集群是主从架构的集群模式,由于存在单点故障问题,解决这个问题需要用到Zookeeper服务,其基本原理是将Standalone集群连接到同一个Zookeeper实例并启动多个Master节点,利用Zookeeper提供的选举和状态保存功能,可以使一台Master节点被选举,另一台Master节点处于Standby状态。当活跃的Master发生故障时,Standby状态的Master就会被激活,恢复集群调度,整个恢复的过程可能需要1-2分钟。

一、集群部署

1.启动Zookeeper集群服务。命令如下:
zkServer.sh start

Zookeeper集群服务之前已经带着同学们搭建过了,还不会或者还没搭建的同学去看看之前的文章。

下面是Zookeeper的核心配置文件zoo.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/export/data/zookeeper /zkdata
clientPort=2181

server.1=hadoop01:2888:3888
server.2=hadoop02:2888:3888
server.3=hadoop03:2888:3888

2.在spark-env.sh配置文件中注释Master节点的配置参数,并指定Spark使用Zookeeper管理。

#指定Master的IP
#export SPARK_MASTER_HOST=hadoop01
#指定Master的端口
export SPARK_MASTER_PORT=7077
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER
-Dspark.deploy.zookeeper.url=hadoop01:2181,hadoop02:2181,hadoop03:2181
-Dspark.deploy.zookeeper.dir=/spark"

关于上述参数的具体说明如下所示:

  • “#”,表示注释当前行
  • spark.deploy.recoveryMode:设置Zookeeper去启动备用Master模式。
  • spark.deploy.zookeeper.url:指定ZooKeeper的Server地址。
  • spark.deploy.zookeeper.dir:保存集群元数据信息的文件、目录。

配置完成后,将spark-env.sh分发至hadoop02、hadoop03节点上,保证配置文件统一,命令如下。

scp spark-env.sh hadoop02:/ekport/servers/spark/conf
scp spark-env.sh hadoop03:/export/servers/spark/conf
二、运行测试

3.在hadoop01主节点启动Spark集群,在hadoop02节点再次启动Master服务。

在hadoop01主节点使用—键启动脚本启动,命令如下:
/export/servers/spark/sbin/start-all.sh

在hadoop02节点再次启动Master服务,命令如下:
/export/servers/spark/sbin/start-master.sh

启动成功后,通过浏览器访问http://hadoop02:8080,查看备用Master节点状态,可以发现status状态为STANDBY。主节点status状态为ALIVE。

4.关闭hadoop01节点中的Master进程,测试Spark HA集群。

Spark HA集群启动完毕后,为了演示是否解决了单点故障问题,可以关闭在hadoopo1节点中的Master进程,用来模拟在生产环境中hadoop01突然宕机,命令如下所示。

/export/servers/spark/sbin/stop-master.sh

执行命令后,通过浏览器查看http://hadoop01:8080,发现已经无法通过hadoop001节点访问Spark集群管理界面。大约经过1-2分钟后,刷新 http://hadoop02:8080页面,可以发现hadoop02节点中的Status值更改为ALIVE,Spark集群恢复正常,说明Spark HA配置有效解决了单点故障问题。

三、多学一招
  • 脚本启动Zookeeper集群
    在集群中启动Zookeeper服务时,需要依次在三台服务器上执行启动命令,然而在实际工作应用中,集群数量并非3台,当遇到数十台甚至更多的服务器时,就不得不编写脚本来启动服务了,编写脚本的语言有多种,这里采用Shelli语言开发一键启动Zookeeper服务脚本, 使用命令vi start_zk.sh创建start_zk.sh文件,内容如下:
#!/bin/sh
for host in hadoop01 hadoop02 hadoop03
do
	ssh $host "source /etc/profile;zkServer.sh start"
	echo "$host zk is running"
done

执行该文件只需要输入"start_zk.sh" 即可启动集群中的Zookeeper服务。

转载自:https://blog.csdn.net/u014727709/article/details/132130729
欢迎start,欢迎评论,欢迎指正