Spark概述

1、什么是Spark

Spark 是一种基于内存的快速,通用,可扩展的大数据分析引擎

2、Spark内置模块

1、SparkCore:最根本的底层抽象
Spark Core实现了Spark的基本功能,包含任务调度、内存管理、错误恢复、与存储系统交互等模块。Spark Core中还包含了对弹性分布式数据集(Resilient Distributed DataSet,简称RDD)的API定义
2、SparkSQL: 操作结构化数据
Spark SQL是Spark用来操作结构化数据的程序包。通过Spark SQL,我们可以使用 SQL或者Apache Hive版本的SQL方言(HQL)来查询数据。Spark SQL支持多种数据源,比如Hive表、Parquet以及JSON等
3、Spark Streaming:实时计算
Spark Streaming是Spark提供的对实时数据进行流式计算的组件。提供了用来操作数据流的API,并且与Spark Core中的 RDD API高度对应
4、Spark Mlib:机器学习
Spark MLlib提供常见的机器学习(ML)功能的程序库。包括分类、回归、聚类、协同过滤等,还提供了模型评估、数据 导入等额外的支持功能
5、Spark Graghx:图计算

3、Spark特点

1、快:与Hadoop的MR相比,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 Mlib)和图计算(Spark Graphx)。这些不同类型的处理都可以在同一个应用中无缝使用,减少开发人员和维护人员的成本和部署平台的物理成本
4、兼容性:Spark可以非常方便地与其他开源产品进行融合。比如,Spark可以使用Hadoop的Yarn和Apache Messos 作为它的资源管理和调度器,并且可以处理所有Hadoop支持的数据,包括HDSF,HBASE等,这对于已经部署Hadoop集群的用户特别重要,因为不需要做任何数据迁移就可以使用Spark的强大处理能力

4、Spark中的角色介绍

Spark概述
Driver :运⾏main函数并且新建SparkContext的程序。

Application:基于Spark的应用程序,包含了driver程序和集群上的executor。

Cluster Manager:指的是在集群上获取资源的外部服务。目前有三种类型 :
Standalone:spark原生的资源管理,由Master负责资源的分配
ApacheMesos:与hadoop MR兼容性良好的一种资源调度框架
HadoopYarn: 主要是指Yarn中的ResourceManager

Worker : 集群中任何可以运行Application代码的节点,在Standalone模式中指的是通过slaves文件配置的Worker节点,在Spark on Yarn模式下就是NodeManager节点

Executor:是在一个worker上为某应⽤启动的⼀个进程,该进程负责运行任务,并且负责将数据存在内存或者磁盘上。每个应⽤都有各自独立的executor。

Task :被送到某个executor上的工作单元。

5、Spark On Yarn的执行流程

Client 模式
Spark概述
1、Spark Yarn Client向YARN的ResourceManager申请启动Application Master。同时在SparkContent初始化中将创建DAGScheduler和TASKScheduler等,由于我们选择的是Yarn-Client模式,程序会选择YarnClientClusterScheduler和YarnClientSchedulerBackend

2、ResourceManager收到请求后,在集群中选择一个NodeManager,为该应用程序分配第一个Container,要求它在这个Container中启动应用程序的ApplicationMaster,与YARN-Cluster区别的是在该ApplicationMaster不运行SparkContext,只与SparkContext进行联系进行资源的分派

3、Client中的SparkContext初始化完毕后,与ApplicationMaster建立通讯,向ResourceManager注册,根据任务信息向ResourceManager申请资源(Container)

4、一旦ApplicationMaster申请到资源(也就是Container)后,便与对应的NodeManager通信,要求它在获得的Container中启动CoarseGrainedExecutorBackend,CoarseGrainedExecutorBackend启动后会向Client中的SparkContext注册并申请Task

5、client中的SparkContext分配Task给CoarseGrainedExecutorBackend执行,CoarseGrainedExecutorBackend运行Task并向Driver汇报运行的状态和进度,以让Client随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务

6、应用程序运行完成后,Client的SparkContext向ResourceManager申请注销并关闭自己

Cluster模式

在YARN-Cluster模式中,当用户向YARN中提交一个应用程序后,YARN将分两个阶段运行该应用程序:

1.第一个阶段是把Spark的Driver作为一个ApplicationMaster在YARN集群中先启动;

2.第二个阶段是由ApplicationMaster创建应用程序,然后为它向ResourceManager申请资源,并启动Executor来运行Task,同时监控它的整个运行过程,直到运行完成
Spark概述
说明如下:

1、Spark Yarn Client向YARN中提交应用程序,包括ApplicationMaster程序、启动ApplicationMaster的命令、需要在Executor中运行的程序等

2、ResourceManager收到请求后,在集群中选择一个NodeManager,为该应用程序分配第一个Container,要求它在这个Container中启动应用程序的ApplicationMaster,其中ApplicationMaster进行SparkContext等的初始化

3、ApplicationMaster向ResourceManager注册,这样用户可以直接通过ResourceManage查看应用程序的运行状态,然后它将采用轮询的方式通过RPC协议为各个任务申请资源,并监控它们的运行状态直到运行结束

4、一旦ApplicationMaster申请到资源(也就是Container)后,便与对应的NodeManager通信,要求它在获得的Container中启动CoarseGrainedExecutorBackend,CoarseGrainedExecutorBackend启动后会向ApplicationMaster中的SparkContext注册并申请Task。这一点和Standalone模式一样,只不过SparkContext在Spark Application中初始化时,使用CoarseGrainedSchedulerBackend配合YarnClusterScheduler进行任务的调度,其中YarnClusterScheduler只是对TaskSchedulerImpl的一个简单包装,增加了对Executor的等待逻辑等

5、ApplicationMaster中的SparkContext分配Task给CoarseGrainedExecutorBackend执行,CoarseGrainedExecutorBackend运行Task并向ApplicationMaster汇报运行的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务

6、应用程序运行完成后,ApplicationMaster向ResourceManager申请注销并关闭自己

Client模式 vs Cluster模式

理解YARN-Client和YARN-Cluster深层次的区别之前先清楚一个概念:Application Master。在YARN中,每个Application实例都有一个ApplicationMaster进程,它是Application启动的第一个容器。它负责和ResourceManager打交道并请求资源,获取资源之后告诉NodeManager为其启动Container。从深层次的含义讲YARN-Cluster和YARN-Client模式的区别其实就是ApplicationMaster进程的区别

YARN-Cluster模式下,Driver运行在AM(Application Master)中,它负责向YARN申请资源,并监督作业的运行状况。当用户提交了作业之后,就可以关掉Client,作业会继续在YARN上运行,因而YARN-Cluster模式不适合运行交互类型的作业

YARN-Client模式下,Application Master仅仅向YARN请求Executor,Client会和请求的Container通信来调度他们工作,也就是说Client不能离开

该博客只是本人学习时的一些整理,这些整理也都来源于各个大佬的视频和播客,我这里只是自己整理好让自己复习时使用,如有侵权,请联系作者删除!