3.Spark设计与运行原理,基本操作
作者:互联网
①Spark已打造出结构一体化、功能多样化的大数据生态系统,请用图文阐述Spark生态系统的组成及各组件的功能。
组件介绍
1 . Spark Core:
Spark的核心组件,其操作的数据对象是RDD(弹性分布式数据集),图中在Spark Core上面的四个组件都依赖于Spark Core,可以简单认为Spark Core就是Spark生态系统中的离线计算框架
2 . Spark Streaming:
Spark生态系统中的流式计算框架,其操作的数据对象是DStream,其实Spark Streaming是将流式计算分解成一系列短小的批处理作业。这里的批处理引擎是Spark Core,也就是把Spark Streaming的输入数据按照batch size(批次间隔时长)(如1秒)分成一段一段的数据系列(DStream),每一段数据都转换成Spark Core中的RDD,然后将Spark Streaming中对DStream的转换计算操作变为针对Spark中对RDD的转换计算操作,如下官方提供的图
3 . Spark Sql:可以简单认为可以让用户使用写SQL的方式进行数据计算,SQL会被SQL解释器转化成Spark core任务,让懂SQL不懂spark的人都能通过写SQL的方式进行数据计算,类似于hive在Hadoop生态圈中的作用,提供SparkSql CLI(命令行界面),可以再命令行界面编写SQL
4 . Spark Graphx:
Spark生态系统中的图计算和并行图计算,目前较新版本已支持PageRank、数三角形、最大连通图和最短路径等6种经典的图算法
5 . Spark Mlib:
一个可扩展的Spark机器学习库,里面封装了很多通用的算法,包括二元分类、线性回归、聚类、协同过滤等。用于机器学习和统计等场景
6 . Tachyon:
Tachyon是一个分布式内存文件系统,可以理解为内存中的HDFS
7 . Local,Standalone,Yarn,Mesos:
Spark的四种部署模式,其中Local是本地模式,一般用来开发测试,Standalone是Spark 自带的资源管理框架,Yarn和Mesos是另外两种资源管理框架,Spark用哪种模式部署,也就是使用了哪种资源管理框架
②请详细阐述Spark的几个主要概念及相互关系:
Master, Worker,RDD,DAG;
Application, job,stage,task;
driver,executor,Claster ManagerDAGScheduler, TaskScheduler.
(1) Master
Spark 特有资源调度系统的 Leader,掌管着整个集群的资源信息(Standalone模式),类似于 Yarn 集群中的ResourceManager。
主要功能:
1. 监听 Worker,看集群中的 Worker 是否正常工作;
2. 管理 Worker、Application(接收 Worker 的注册并管理所有的 Worker;接收 Client 提交的 Application,调度等待的 Application 并向 Worker 提交);
(2) Worker
Spark 特有资源调度系统的 Slaver,一个集群中有多个 Slaver(Standalone),每个 Slaver 掌管着所在节点的资源信息,类似于 Yarn 框架中的 NodeManager。
主要功能:
1. 通过 RegisterWorker 注册到 Master;
2. 定时发送心跳给 Master;
3. 根据 Master 发送的 Application 配置进程环境,并启动 ExecutorBackend(执行 Task 所需的临时进程)。
(3) RDD(Resilient Distributed Dataset) 弹性分布式数据集
RDD 是 Spark 对数据的核心抽象,其实就是分布式的元素集合。在 Spark 中,对数据的所有操作不外乎创建 RDD、转化已有RDD 以及调用 RDD 操作进行求值。而在这一切背后, Spark 会自动将 RDD 中的数据分发到集群上,并将操作并行化执行。
Spark 中 RDD 是一种不可变的分布式对象集合,所以,对 RDD 的每一个操作都会生成一个新的 RDD。
(4) DAG
RDD是spark中最基本的数据单元,各个RDD之间通过不同RDD算子,连接形成了DAG(有向无环图),并依据RDD的宽窄依赖关系将DAG划分为不同的stage,使得spark更加高效的调度及计算。
在spark中,DAG中的顶点就相当于stage,关系就相当于宽依赖算子。
(5) Application
application是SparkAPI 编程的应用程序,它包括实现Driver功能的代码和在程序中各个executor上要执行的代码,一个application由多个job组成。其中应用程序的入口为用户所定义的main方法。
核心:
1.当Driver端向master申请完成后,调用worker,这时worker会同Driver端进行通信,将执行程序接收,从而执行逻辑。
2.当数据的规则被切分放到各个worker中时,因为规则的不完整,这时Driver端会将将各切分的数据进行拉回组合,形成完整的规则后,再以广播的形式(broadcast)发送到不同worker上。使得规则完整,从而进行后续数据的处理。
3.一个分区会产生一个task
(6) job
job是有多个stage构建的并行的计算任务,job是由spark的action操作来触发的,在spark中一个job包含多个RDD以及作用在RDD的各种操作算子。
(7) stage
DAG Scheduler会把DAG切割成多个相互依赖的Stage,划分Stage的一个依据是RDD间的宽窄依赖。
在对Job中的所有操作划分Stage时,一般会按照倒序进行,即从Action开始,遇到窄依赖操作,则划分到同一个执行阶段,遇到宽依赖操作,则划分一个新的执行阶段,且新的阶段为之前阶段的parent,然后依次类推递归执行。
child Stage需要等待所有的parent Stage执行完之后才可以执行,这时Stage之间根据依赖关系构成了一个大粒度的DAG。在一个Stage内,所有的操作以串行的Pipeline的方式,由一组Task完成计算。
(8) task
TaskSet 可以理解为一种任务,对应一个stage,是Task组成的任务集。一个TaskSet中的所有Task没有shuffle依赖可以并行计算。
Task是spark中最独立的计算单元,由Driver Manager发送到executer执行,通常情况一个task处理spark RDD一个partition。Task分为ShuffleMapTask和ResultTask两种,位于最后一个Stage的Task为ResultTask,其他阶段的属于ShuffleMapTask。
(9) Driver
驱动器节点,它是一个运行Application中main函数并创建SparkContext的进程。application通过Driver 和Cluster Manager及executor进行通讯。它可以运行在application节点上,也可以由application提交给Cluster Manager,再由Cluster Manager安排worker进行运行。
Driver节点也负责提交Job,并将Job转化为Task,在各个Executor进程间协调Task的调度。
(10) executor
executor 是真正执行计算任务的组件,它是application运行在worker上的一个进程。这个进程负责Task的运行,它能够将数据保存在内存或磁盘存储中,也能够将结果数据返回给Driver。
(11) DAG Scheduler
DAG Scheduler 是面向stage的高层级的调度器,DAG Scheduler把DAG拆分为多个Task,每组Task都是一个stage,解析时是以shuffle为边界进行反向构建的,每当遇见一个shuffle,spark就会产生一个新的stage,接着以TaskSet的形式提交给底层的调度器(task scheduler),每个stage封装成一个TaskSet。DAG Scheduler需要记录RDD被存入磁盘物化等动作,同时会需要Task寻找最优等调度逻辑,以及监控因shuffle跨节点输出导致的失败。
(12) TaskScheduler
TaskScheduler是一个可插拔任务调度接口,通过不同的SchedulerBackend进行任务的调度。主要功能如下:
1、一个TaskScheduler只为一个SparkContext服务,接收DAGScheduler提交过来的一组组的TaskSet;
2、TaskScheduler将task提交到集群中并执行,如果其中某个Task执行失败则重试之;TaskScheduler将TaskSet对应的执行结果返回才DAGScheduler;
3、TaskScheduler处理straggle任务(比如:100个任务运行,其中99个任务快,1个任务慢,需要在另外一个节点上开启一个相同的任务来运行,谁先完成取用谁);
4、遇到shuffle输出丢失则汇报给DAGScheduler;
5、为每个TaskSet维护一个TaskSetManager追踪本地性(resourceOffer-->findTask)及错误信息;
相互关系
③在PySparkShell尝试以下代码,观察执行结果,理解sc,RDD,DAG。请画出相应的RDD转换关系图。
转换关系图
标签:Task,Driver,RDD,DAG,原理,基本操作,Spark,stage 来源: https://www.cnblogs.com/hushub/p/15983620.html