Spark的RDD概要&DAG概述
1.RDD: 弹性分布式数据集(相当于集合)
弹性:RDD的数据默认是存放在内存中,但是内存资源存在不足的情况,spark会将RDD数据写入磁盘(内存和磁盘切换)
容错:如果任务执行失败,可以自动从失败节点进行恢复,由于某个节点宕机了导致数据丢失,RDD会根据自己的数据来源重新计算一遍,计算失败的partition的数据
基于血缘关系:代表具体的任务的来龙去脉,映射hive 表是由哪些表进行生成的或者是最终作用哪些表
分布式:基于集群
数据集:针对一个RDD有多个partition
2.RDD对应HDFS关系图
3.DAG概要
DAG,有向无环图,Directed Acyclic Graph的缩写,常用于建模。Spark中使用DAG对RDD的关系进行建模,描述了RDD的依赖关系,这种关系也被称之为lineage,RDD的依赖关系使用Dependency维护,参考Spark RDD之Dependency,DAG在Spark中的对应的实现为DAGScheduler。
基础概念
介绍DAGScheduler中的一些概念,有助于理解后续流程。
名词 | 解释 |
---|---|
Job | 调用RDD的一个action,如count,即触发一个Job,spark中对应实现为ActiveJob,DAGScheduler中使用集合activeJobs和jobIdToActiveJob维护Job |
Stage | 代表一个Job的DAG,会在发生shuffle处被切分,切分后每一个部分即为一个Stage,Stage实现分为ShuffleMapStage和ResultStage,一个Job切分的结果是0个或多个ShuffleMapStage加一个ResultStage |
Task | 最终被发送到Executor执行的任务,和stage的ShuffleMapStage和ResultStage对应,其实现分为ShuffleMapTask和ResultTask |
创建 RDD 对象;SparkContext 负责计算 RDD 之间的依赖关系,构建 DAG;DAGSchedule 负责把 DAG 图反向解析成多个阶段,每个阶段中包含多个任务,每个任务会被任务调度器分发给工作节点上的 Executor 上执行。