Spark学习--1、Spark入门(Spark概述、Spark部署、Local模式、Standalone模式、Yarn模式)

1、Spark概述

1.1 什么是Spark

Spark是一个基于内存的快速、通用、可扩展的大数据分析计算引擎。

1.2 Hadoop和Spark历史

在这里插入图片描述
在这里插入图片描述
Hadoop的Yarn框架比Spark框架诞生的晚,所以Spark自己也设计了一套资源调度框架。

1.3 Hadoop和Spark框架对比

在这里插入图片描述

1.4 Spark内置模块

在这里插入图片描述

模块名 作用
Spark Core 实现了Spark的基本功能,包含任务调度、内存管理、错误恢复、与存储系统交互等模块。Spark Core中还包含了对弹性分布式数据集(Resilient Distributed DataSet,简称RDD)的API定义
Spark SQL 是Spark用来操作结构化数据的程序。通过Spark SQL,我们可以使用SQL或者Apache Hive版本的HQL来查询数据。Spark SQL支持多种数据源,比如Hive表、Parquet以及JSON等
Spark Streaming 是Spark提供的对实时数据进行流式计算的组件。提供了用来操作数据量的API,并且与Spark Core的RDD API高度对应
Spark MLib 提供常见的机器学习功能的程序库。包括分类、回归、聚类、协同过滤,还提供了模型评估、数据、导入等额外的支持功能
Spark GraphX 主要用于图形并行计算和图挖掘系统的组件
集群管理器 Spark设计为可以高效地在一个计算节点到数千个计算节点之间伸缩计算。为了实现这样的要求,同时获得最大灵活性,Spark支持在各种集群管理器(Cluster Manager)上运行,包括Hadoop Yarn、Apache Mesos,以及Spark自带的一个简易调度器,叫做独立调度器

1.5 Spark特点

1、快:与Hadoop的MapReduce相比,Spark基于内存的运算要快100倍以上,基于硬盘的运算也要快10倍以上。Spark实现了高效地DAG执行引擎,可以通过基于内存来高效处理数据流。计算的中间结果是存在于内存中的。
2、易用:Spark支持Java、Python和Scala的API,还支持超过80种高级算法,使用户可以快速构建不同的应用。而且Spark支持交互式的Python和Scala的Shell,可以非常方便的在这些Shell中使用Spark集群来验证解决问题的办法。
3、通用:Spark提供了统一的解决方案。Spark可以用于交互式查询(Spark SQL)、实时流处理(Spark Streaming)、机器学习(Spark Lib)和图计算(GraphX)。这些不同类型的处理都可以在同一个应用中无缝使用、减少了开发和维护的人力成本和部署平台的物力成本。
4、兼容性:Spark可以非常方便地与其他的开源产品进行融合。比如,Spark可以使用Hadoop的Yarn好Apache Mesos作为它的资源管理和调度器,并且可以处理所以Hadoop支持的数据,包括HDFS、HBase等。这对于已经部署Hadoop集群的用户特别重要,因为不需要做任何数据迁移就可以使用Spark强大的处理能力。

2、Spark 运行模式

部署Spark集群大体上分为两种模式:单机模式与集群模式
(1)Local模式: 在本地部署单个Spark服务
(2)Standalone模式:Spark自带的任务调度模式。(国内常用)
(3)YARN模式: Spark使用Hadoop的YARN组件进行资源与任务调度。(国内最常用)
(4)Mesos模式: Spark使用Mesos平台进行资源与任务的调度。(国内很少用)

2.1 Spark安装地址

1)官网地址:http://spark.apache.org/
2)文档查看地址:https://spark.apache.org/docs/3.3.0/
3)下载地址:https://spark.apache.org/downloads.html https://archive.apache.org/dist/spark/

2.2 Local模式

Local模式就是运行在一台计算机上的模式,通常就是用于在本机上练手和测试。

2.2.1 安装使用

1、上传并解压Spark安装包
2、官方求PI案例

##先进入Spark软件的家目录
bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master local[2] \
./examples/jars/spark-examples_2.12-3.3.0.jar \
10

##	--class 表示要执行程序的主类
##  --master local[2] 
##  local:没有指定线程数,则所以计算都运行在一个线程中,没有任何并行计算
## 	local[K]:指定使用K个Core来运行计算
##  local[*]:默认模式。自动帮你按照CPU最多核来设置线程数
##	spark-examples_2.12-3.3.0.jar:要运行的程序;
##	10:要运行程序的输入参数(计算圆周率π的次数,计算次数越多,准确率越高);

3、查看spark-submit所以参数

bin/spark-submit

4、结果展示
在这里插入图片描述

2.2.2 查看任务运行详情

再次运行求PI任务,增加任务次数

bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master local[2] \
./examples/jars/spark-examples_2.12-3.3.0.jar \
1000

在任务运行还没有完成时,可登录hadoop102:4040查看程序运行结果
在这里插入图片描述

2.3 Standalone模式

Standalone模式是Spark自带的资源调度引擎,构建一个由Master+Worker构成的Spark集群,Spark运行在集群中。这个standalone区别于Hadoop的,这里的Standalone是指只用Spark来搭建一个集群,不需要借助其他框架。

2.3.1 集群角色之资源管理

Master和Worker集群资源管理
在这里插入图片描述
Master和Worker是Spark的守护进程、集群资源管理者,即Spark在特定模式(Standalone)下正常运行必须要有的后台常驻进程。

Driver和Executor任务的管理者
在这里插入图片描述
Driver和Executor是临时程序,当有具体任务提交到Spark集群才会开启的程序。
Standalone是Spark自带的资源调度引擎,构建一个由Master+Worker构成的Spark集群,Spark运行在集群中。

2.3.2 安装使用

1、集群规划

hadoop102 hadoop103 hadoop104
Spark Master Worker Worker Worker

2、再解压一份Spark安装包,并修改解压后的文件夹名称为spark-standalone
3、进入Spark的配置目录/opt/module/spark-standalone/conf
4、重命名conf/workers.template文件为conf/workers,并修改works文件内容,添加work节点

vim workers
添加内容如下:
hadoop102
hadoop103
hadoop104

5、修改重命名文件conf/spark-env.sh.template为conf/spark-env.sh文件,添加master节点

SPARK_MASTER_HOST=hadoop102
SPARK_MASTER_PORT=7077

6、分发spark-standalone包
7、启动Spark集群

##进入spark-standalone的家目录
sbin/start-all.sh

8、查看三台服务器运行进程
在这里插入图片描述

9、网页查看:hadoop102:8080(master web的端口,相当于yarn的8088端口)
目前还看不到任何任务的执行信息。
10、官方求PI案例

bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://hadoop102:7077 \
./examples/jars/spark-examples_2.12-3.3.0.jar \
10

##--master spark://hadoop102:7077指定要连接的集群的master(配置文件中所配置的信息一致)。

11、页面查看http://hadoop102:8080/
·8080:master的webUI
·4040:application的webUI的端口号

2.3.3 参数说明

我们当然也可以根据实际任务需求指定使用资源
1、配置Executor可用内存为2G,使用CPU核数为2个

bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://hadoop102:7077 \
--executor-memory 2G \
--total-executor-cores 2 \
./examples/jars/spark-examples_2.12-3.3.0.jar \
10

2、页面查看http://hadoop102:8080/
在这里插入图片描述
3、基本语法

bin/spark-submit \
--class <main-class>
--master <master-url> \
... # other options
<application-jar> \
[application-arguments]
##参数	解释
##--class	Spark程序中包含主函数的类
##--master	Spark程序运行的模式
##--executor-memory 1G	指定每个executor可用内存为1G
##--total-executor-cores 2	指定所有executor使用的cpu核数为2个
##application-jar	打包好的应用jar,包含依赖。这个URL在集群中全局可见。 比如hdfs:// 共享存储系统,如果是file:// path,那么所有的节点的path都包含同样的jar
##application-arguments	传给main()方法的参数
2.3.4 配置历史服务

由于spark-shell停止掉后,hadoop102:4040页面就看不到历史任务的运行情况,所以我们需要历史服务器任务日志。
1、修改spark-default.conf.template名称

mv spark-defaults.conf.template spark-defaults.conf

2、修改spark-default.conf文件,配置日志存储路径(写)

spark.eventLog.enabled          true
spark.eventLog.dir              hdfs://hadoop102:8020/directory

## 注意:需要启动Hadoop集群,HDFS上的目录需要提前存在(因为历史任务日志数据存储在HDFS上)。

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

export SPARK_HISTORY_OPTS="
-Dspark.history.ui.port=18080 
-Dspark.history.fs.logDirectory=hdfs://hadoop102:8020/directory 
-Dspark.history.retainedApplications=30"
# 参数1含义:WEBUI访问的端口号为18080
# 参数2含义:指定历史服务器日志存储路径(读)
# 参数3含义:指定保存Application历史记录的个数,如果超过这个值,旧的应用程序信息将被删除,这个是内存中的应用数,而不是页面上显示的应用数。

4、分发配置文件
5、启动历史服务

sbin/start-history-server.sh

6、再次执行任务

bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://hadoop102:7077 \
--executor-memory 1G \
--total-executor-cores 2 \
./examples/jars/spark-examples_2.12-3.3.0.jar \
10

7、查看Spark历史服务地址:hadoop102:18080
在这里插入图片描述

2.3.5 配置高可用(HA)

1、高可用原理
在这里插入图片描述
2、配置高可用
(0)停止Spark集群
(1)Zookeeper正常安装并启动
(2)修改spark-env.sh文件添加如下配置

#注释掉如下内容:
#SPARK_MASTER_HOST=hadoop102
#SPARK_MASTER_PORT=7077

#添加如下内容。配置由Zookeeper管理Master,在Zookeeper节点中自动创建/spark目录,用于管理:
export SPARK_DAEMON_JAVA_OPTS="
-Dspark.deploy.recoveryMode=ZOOKEEPER 
-Dspark.deploy.zookeeper.url=hadoop102,hadoop103,hadoop104 
-Dspark.deploy.zookeeper.dir=/spark"

#添加如下代码
#Zookeeper3.5的AdminServer默认端口是8080,和Spark的WebUI冲突
export SPARK_MASTER_WEBUI_PORT=8989

(3)分发配置文件
(4)在hadoop102上启动全部节点
(5)在hadoop103上单独启动master节点
3、高可用测试
(1)查看hadoop102的master进程
(2)Kill掉hadoop102的master进程,页面中观察http://hadoop103:8080/的状态是否切换为alive。
在这里插入图片描述

(3)再启动hadoop102的master进程
在这里插入图片描述

2.3.5 运行流程

Spark有Standalone-Client和Standalone-Cluster两种模式,主要区别在于:Driver程序的运行节点。
1、客户端模式

bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://hadoop102:7077,hadoop103:7077 \
--executor-memory 2G \
--total-executor-cores 2 \
--deploy-mode client \
./examples/jars/spark-examples_2.12-3.3.0.jar \
10

–deploy-mode client,表示Driver程序运行在本地客户端,默认模式。
在这里插入图片描述
2、集群模式模式

bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://hadoop102:7077,hadoop103:7077 \
--executor-memory 2G \
--total-executor-cores 2 \
--deploy-mode cluster \
./examples/jars/spark-examples_2.12-3.3.0.jar \
10

–deploy-mode cluster,表示Driver程序运行在集群。
在这里插入图片描述

2.4 Yarn模式

Spark客户端直接连接Yarn,不需要额外构建Spark集群

2.4.1 安装使用

(0)停止Standalone模式下的spark集群
(1)为了防止和Standalone模式冲突,再单独解压一份spark
(2)进入到/opt/module目录,修改spark-3.3.0-bin-hadoop3.2名称为spark-yarn
(3)修改hadoop配置文件/opt/module/hadoop-3.1.3/etc/hadoop/yarn-site.xml,添加如下内容(因为测试环境虚拟机内存较少,防止执行过程进行被意外杀死,做如下配置)

<!--是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是true -->
<property>
     <name>yarn.nodemanager.pmem-check-enabled</name>
     <value>false</value>
</property>
<!--是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true -->
<property>
     <name>yarn.nodemanager.vmem-check-enabled</name>
     <value>false</value>
</property>

4、分发配置文件
5、修改/opt/module/spark-yarn/conf/spark-env.sh,添加YARN_CONF_DIR配置,保证后续运行任务的路径都变成集群路径

YARN_CONF_DIR=/opt/module/hadoop/etc/hadoop 

6、启动HDFS以及YARN集群
7、执行一个程序

bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
./examples/jars/spark-examples_2.12-3.3.0.jar \
10

#参数:--master yarn,表示Yarn方式运行;--deploy-mode表示客户端方式运行程序

8、查看hadoop103:8088页面,点击History,查看历史页面
在这里插入图片描述

2.4.2 配置历史服务

由于是重新解压的Spark压缩文件,所以需要针对Yarn模式,再次配置一下历史服务器。
1、修改spark-default.conf.template名称

mv spark-defaults.conf.template spark-defaults.conf

2、修改spark-default.conf文件,配置日志存储路径(写)

spark.eventLog.enabled          true
spark.eventLog.dir               hdfs://hadoop102:8020/directory

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

export SPARK_HISTORY_OPTS="
-Dspark.history.ui.port=18080 
-Dspark.history.fs.logDirectory=hdfs://hadoop102:8020/directory 
-Dspark.history.retainedApplications=30"

# 参数1含义:WEBUI访问的端口号为18080
# 参数2含义:指定历史服务器日志存储路径(读)
# 参数3含义:指定保存Application历史记录的个数,如果超过这个值,旧的应用程序信息将被删除,这个是内存中的应用数,而不是页面上显示的应用数。
2.4.3 配置查看历史日志

为了能从Yarn上关联到Spark历史服务器,需要配置spark历史服务器关联路径。
目的:点击yarn(8088)上spark任务的history按钮,进入的是spark历史服务器(18080),而不再是yarn历史服务器(19888)。
1、修改配置文件/opt/module/spark-yarn/conf/spark-defaults.conf

#添加如下内容:
spark.yarn.historyServer.address=hadoop102:18080
spark.history.ui.port=18080

2、重启Spark历史服务
3、提交任务到Yarn执行

bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
./examples/jars/spark-examples_2.12-3.3.0.jar \
10

4、Web页面查看日志:http://hadoop103:8088/cluster
点击“history”跳转到http://hadoop102:18080/

2.4.4 运行流程

Spark有yarn-client和yarn-cluster两种模式,主要区别在于:Driver程序的运行节点。
yarn-client:Driver程序运行在客户端,适用于交互、调试,希望立即看到app的输出。
yarn-cluster:Driver程序运行在由ResourceManager启动的APPMaster,适用于生产环境。

1、客户端模式(默认)
(1)执行任务

	bin/spark-submit \
	--class org.apache.spark.examples.SparkPi \
	--master yarn \
	--deploy-mode client \
	./examples/jars/spark-examples_2.12-3.3.0.jar \
	10

(2)任务执行结果输出在本地控制台中
在这里插入图片描述
(3)yarn查看任务
在这里插入图片描述
在这里插入图片描述
YarnClient运行模式介绍
在这里插入图片描述
2、集群模式
(1)执行任务

bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode cluster \
./examples/jars/spark-examples_2.12-3.3.0.jar \
10

(2)本地看不见结果输出
在这里插入图片描述

(3)看http://hadoop103:8088/cluster页面,点击History按钮,跳转到历史详情页面
在这里插入图片描述

(4)查看结果输出:http//8080点击Executors->点击driver中的stdout

在这里插入图片描述
在这里插入图片描述

2.5 Mesos模式

Spark客户端直接连接Mesos;不需要额外构建Spark集群。国内应用比较少,更多的是运用Yarn调度。

2.6 几种模式对比

模式 Spark安装机器数 需要启动的进程 所属者
local 1 Spark
Standalone 3 Master及Worker Spark
Yarn 1 Yarn及HDFS Hadoop

2.7 端口号总结

1、Spark查看当前Spark-shell运行任务情况端口号:4040
2、Spark Master内部通信服务端口号:7070
3、Spark Standalone模式Master Web端口号:8080
4、Spark历史服务器端口号:18080

猜你喜欢

转载自blog.csdn.net/qq_44804713/article/details/131548610