当前位置:   article > 正文

Spark学习

Spark学习

目录

一,Spark是什么

二,Spark的运行模式

三,Spark运行的角色有四类:

四,用户程序从最开始的提交到最终的计算执行,需要经历以下几个阶段:

 五,存在Master单点故障(SPOF)的问题。

六,Spark On Yarn的本质


一,Spark是什么

        Spark是一款分布式内存计算的统一分析引擎,是一个基于线程的分布式纯计算工具,为了数据共享和提高运行效率。

        Spark在处理数据时,可以将中间的处理结果存到内存中,并且提供了丰富的算子API

Spark的核心就是Spark Core,可以进行海量离线数据的批处理计算

二,Spark的运行模式

三,Spark运行的角色有四类:

资源管理层面

管理者:Master角色:管理整个集群的资源,相当于YARN中的ResouceManger

工作中:Worker角色:管理单个服务器的资源,相当于YARN中的NodeManger

某任务管理者:Driver角色,管理单个Spark任务在运行时的工作,相当于YARN中的ApplicationMaster

某任务执行者:Executor角色:单个任务运行时的时候的工作者,相当于YARN容器运行的TASK,具体工作的进程

每一个Spark进程运行时,会绑定到Driver所在机器的4040端口,如果4040被占用,会顺延到4041,4042等

Standalone架构,是Spark自带的一种集群模式,

不同于前面本地模式启动多个进程来模拟集群的环境,Standalone模式是真实地在多个机器之间搭建Spark集群的环境,完全可以利用该模式搭建多机器集群,用于实际的大数据处理。
StandAlone 是完整的Spark运行环境,其中:
Master角色以Master进程存在, Worker角色以Worker进程存在
Driver和Executor运行于Worker进程内, 由Worker提供资源供给它们运行

Master的默认端口为8080,同样如果被占用,会顺延到8081,8082,8083等

18080: 默认是历史服务器的端口, 由于每个程序运行完成后,4040端口就被注销了. 在以后想回看某个程序的运行状态就可以通过历史服务器查看,历史服务器长期稳定运行,可供随时查看被记录的程序的运行过程.

集群模式下程序是在集群上运行的,不要直接读取本地文件,应该读取hdfs上的

因为程序运行在集群上,具体在哪个节点上我们运行并不知道,其他节点可能并没有那个数据文件

从图中可以看到Spark Application运行到集群上时,由两部分组成:Driver Program和Executors。
第一、Driver Program
1.相当于AppMaster,整个应用管理者,负责应用中所有Job的调度执行;
2.运行JVM Process,运行程序的MAIN函数,必须创建SparkContext上下文对象;
3.一个SparkApplication仅有一个;
第二、Executors
1.相当于一个线程池,运行JVM Process,其中有很多线程,每个线程运行一个Task任务,一个Task任务运行需要1 Core CPU,所有可以认为Executor中线程数就等于CPU Core核数;
 一个Spark Application可以有多个,可以设置个数和资源信息;

四,用户程序从最开始的提交到最终的计算执行,需要经历以下几个阶段:

1 )用户程序创建 SparkContext 时,新创建的 SparkContext 实例会连接到 ClusterManager Cluster Manager 会根据用户提交时设置的CPU 和内存等信息为本次提交分配计算资源,启动 Executor
2 Driver 会将用户程序划分为不同的执行阶段 Stage ,每个执行阶段 Stage 由一组完全相同 Task 组成,这些 Task 分别作用于待处理数据的不同分区。在阶段划分完成和Task 创建后, Driver 会向 Executor 发送 Task
3 Executor 在接收到 Task 后,会下载 Task 的运行时依赖,在准备好 Task 的执行环境后,会开始执行 Task ,并且将 Task 的运行状态汇报给Driver
4 Driver 会根据收到的 Task 的运行状态来处理不同的状态更新。 Task 分为两种:一种是 Shuffle Map Task ,它实现数据的重新洗牌,洗牌的结果保存到Executor 所在节点的文件系统中;另外一种是 Result Task ,它负责生成结果数据;
5 Driver 会不断地调用 Task ,将 Task 发送到 Executor 执行,在所有的 Task 都正确执行或者超过执行次数的限制仍然没有执行成功时停止;
        一个Spark Application 中,包含多个 Job 每个 Job 有多个 Stage 组成 ,每个 Job 执行按照 DAG 图进行的。
其中每个 Stage 中包含多个 Task 任务,每个 Task 以线程 Thread 方式执行,需要 1Core CPU

Spark Application 程序运行时三个核心概念: Job Stage
Task ,说明如下:
Job :由多个 Task 的并行计算部分,一般 Spark 中的 action 操作(如 save collect ,后面进一步说明),会生成一个Job
Stage Job 的组成单位,一个 Job 会切分成多个 Stage,Stage 彼此之间相互依赖顺序执行,而每个 Stage 是多 个Task 的集合,类似 map reduce stage
Task :被分配到各个 Executor 的单位工作内容,它是 Spark 中的最小执行单位,一般来说有多少个 Paritition (物理层面的概念,即分支可以理解为将数据划分成不同 部分并行处理),就会有多少个 Task ,每个 Task 只会处 理单一分支上的数据。
bin/spark-submit --master spark://server:7077 Standalone 提交 Spark 应用的命令

 五,Spark Standalone集群是Master-Slaves架构的集群模式,和大部分的Master-Slaves结构集群一样,存在着Master单点故障(SPOF)的问题。

如何解决这个单点故障的问题, Spark 提供了两种方案:
1. 基于文件系统的单点恢复 (Single-Node Recovery with Local File System)-- 只能用于开发或测试环境。
2. 基于 zookeeper Standby Masters(Standby Masters with ZooKeeper)-- 可以用于生产环境。
ZooKeeper 提供了一个 Leader Election 机制,利用这个机制可以保证虽然集群存在多个 Master ,但是只有一个是 Active的,其他的都是Standby 。当 Active Master 出现故障时,另外的一个 Standby Master 会被选举出来。由于集群的信息
,包括 Worker Driver Application 的信息都已经持久化到文件系统,因此在切换的过程中只会影响新 Job 的提交,对于正在进行的Job 没有任何的影响。加入 ZooKeeper 的集群整体架构如下图所示。

对于Spark On YARN, 无需部署Spark集群, 只要找一台服务器, 充当Spark的客户端, 即可提交任务到YARN集群中运行.

六,Spark On Yarn的本质

Master 角色由 YARN ResourceManager 担任 .
Worker 角色由 YARN NodeManager 担任 .
Driver 角色运行在 YARN 容器 内或提交任务的 客户端进程
真正干活的 Executor 运行在 YARN 提供的容器
Spark On Yarn 需要啥 ?
1. 需要 Yarn 集群 : 已经安装了
2. 需要 Spark 客户端工具 , 比如 spark-submit, 可以将 Spark 程序提交到 YARN
3. 需要被提交的代码程序 : ,如 spark/examples/src/main/python/pi.py 此示例程序 , 或我们后续自己开发的 Spark 任务
Spark On YARN 是有两种运行模式的 , 一种是 Cluster 模式一种是 Client 模式 .
这两种模式的区别就是 Driver 运行的位置 .
Cluster 模式即 :Driver 运行在 YARN 容器内部 , ApplicationMaster 在同一个容器内
Client 模式即 :Driver 运行在客户端进程中 , 比如 Driver 运行在 spark-submit 程序的进程中
Cluster 模式
Client 模式
Client模式和Cluster模式最最本质的区别是:Driver程序运行在哪里。
Client 模式:学习测试时使用,生产不推荐 ( 要用也可以 , 性能略低 , 稳定性略低 )

1.Driver 运行在 Client , 和集群的通信成本高
2.Driver 输出结果会在客户端显示
Cluster 模式:生产环境中使用该模式
1.Driver 程序在 YARN 集群中,和集群的通信成本低
2.Driver 输出结果不能在客户端显示

3. 该模式下 Driver 运行 ApplicattionMaster 这个节点上 , Yarn 管理,如果出现问题, yarn 会重启ApplicattionMaster(Driver)
具体流程步骤如下:
1 )、 Driver 在任务提交的本地机器上运行, Driver 启动后会和 ResourceManager 通讯申请启动 ApplicationMaster
2 )、随后 ResourceManager 分配 Container ,在合适的 NodeManager 上启动 ApplicationMaster ,此时的
ApplicationMaster 的功能相当于一个 ExecutorLaucher ,只负责向 ResourceManager 申请 Executor 内存;
3 )、 ResourceManager 接到 ApplicationMaster 的资源申请后会分配 Container ,然后 ApplicationMaster 在资源分
配指定的 NodeManager 上启动 Executor 进程;
4 )、 Executor 进程启动后会向 Driver 反向注册, Executor 全部注册完成后 Driver 开始执行 main 函数;
5 )、之后执行到 Action 算子时,触发一个 Job ,并根据宽依赖开始划分 Stage ,每个 Stage 生成对应的 TaskSet ,之后
Task 分发到各个 Executor 上执行。
YARN Cluster 模式下, Driver 运行在 NodeManager Contanier 中,此时 Driver AppMaster 合为一体,示意图如下:
具体流程步骤如下:
1 )、 Driver 在任务提交的本地机器上运行, Driver 启动后会和 ResourceManager 通讯申请启动 ApplicationMaster;
2 )、随后 ResourceManager 分配 Container ,在合适的 NodeManager 上启动 ApplicationMaster ,此时的 ApplicationMaster的功能相当于一个 ExecutorLaucher ,只负责向 ResourceManager 申请 Executor 内存;
3 )、 ResourceManager 接到 ApplicationMaster 的资源申请后会分配 Container ,然后 ApplicationMaster 在资源分配指定的NodeManager 上启动 Executor 进程;
4 )、 Executor 进程启动后会向 Driver 反向注册, Executor 全部注册完成后 Driver 开始执行 main 函数;
5 )、之后执行到 Action 算子时,触发一个 Job ,并根据宽依赖开始划分 Stage ,每个 Stage 生成对应的 TaskSet ,之后将Task 分发到各个 Executor 上执行。

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/349281
推荐阅读
相关标签
  

闽ICP备14008679号