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模式,关于这三种集群模式的相关介绍具体如下:
-
Standalone模式
- Standalone模式被称为集群单机模式
- 在该模式下,Spark集群架构为主从模式,即一台Master节点与多台Slave节点,Slave节点启动的进程名称为Worker。(主节点只有一个,所以存在单点故障问题,要搭建高可用的Spark集群)
-
Mesos模式
- Mesos模式被称为Spark on Mesos模式。
- Mesos是一款资源调度管理系统,为Spark提供服务,由于Spark与Mesos存在密切的关系,因此在设计Spark框架时充分考虑到对Mesos的集成。但如果你同时运行Hadoop和Spark,从兼容性的角度来看,Spark on Yarn是更好的选择。
-
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下载
- 下载Spark安装包
- 下载地址
下载地址可以在百度中直接搜索或者参看我之前的博客。
进入后来到Spark的官网,点击【Download】就可以打开下载界面:https://spark.apache.org/downloads.html。
Spark安装包的下载页面如下图所示:
可以将页面向下拉,找到【Spark release archives】点击进去找历史版本下载。
二、Spark安装
- 解压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)进入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
- 分发文件
修改完成配置文件后,将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集群配置完成了 。
- 启动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,欢迎评论,欢迎指正
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!