3.Spark设计与运行原理,基本操作

1.Spark已打造出结构一体化、功能多样化的大数据生态系统,请用图文阐述Spark生态系统的组成及各组件的功能。

2、请详细阐述Spark的几个主要概念及相互关系

 

 Master, Worker;  RDD,DAG; Application, job,stage,task; driver,executor,Claster Manager

 

1.Task(任务):RDD中的一个分区对应一个task,task是单个分区上最小的处理流程单元

 

2.TaskSet(任务集):一组关联的,但相互之间没有Shuffle依赖关系的Task集合。

 

3.Stage(调度阶段):一个taskSet对应的调度阶段,每个job会根据RDD的宽依赖关系被切分很多Stage,每个stage都包含 一个TaskSet。

 

4.job(作业):由Action算子触发生成的由一个或者多个stage组成的计算作业。

 

5.application:用户编写的spark应用程序,由一个或者多个job组成,提交到spark之后,spark为application分派资源,将程序转换并执行。

 

6.DAGScheduler:根据job构建基于stage的DAG,并提交stage给TaskScheduler。

 

7.TaskScheduler:将Taskset提交给Worker Node集群运行并返回结果。

 

 

 

关系:

 

1,Application

 

一个SparkContext就是一个application,通过spark-submit脚本提交给集群。

 

2,DAG

 

RDD依赖组成的有向无环图,来表明一个Application中RDD的依赖关系。

 

3,Job

 

(1)没有检查点的正常情况下一个行动算子触发一个Job。

 

(2)如果行动算子的依赖链中有检查点(checkpoint),则至少有一个额外的Job来专门执行检查点功能。如果有多个checkpoint,需要根据下面参数来确定checkpoint Job的数量:spark.checkpoint.checkpointAllMarkedAncestors

 

如果值为true,则所有检查点都会执行,父RDD的checkpoint Job先执行。

 

否则只执行最靠后的RDD的checkpoint Job任务。

 

(3)主线程是串行阻塞式提交Job的,一个行动操作Job执行完毕后执行其依赖链中的checkpoint Job;然后执行下一个行动操作Job及其checkpoint Job。

 

4 Stage

 

(1)stage分为两类:ShuffleMapStage和ResultStage

 

(2)Spark根据ShuffleDependency来划分Stage,一个ShuffleDependency依赖关系的父RDD为前一个Stage的结束,子RDD(都是ShuffledRDD)下一个stage的开始。一个ShuffleDependency一个ShuffleMapStage,另外还会有一个ResultStage。

 

(3)一个Job stage的总数=零个或者多个ShuffleMapStage+一个ResultStage。

 

(4)stage之间有依赖关系,按照依赖关系的顺序串行执行。

 

5 Task

 

(1)Task分为两类:ShfflueMapTask和ResultTask。

 

(2)每个ShuffleMapStage都有一个或者多个ShfflueMapTask,数量为ShuffleMapStage中最后一个RDD的分区数量;

 

(3)每个ResultStage都有一个或者多个ResultStage,数量为ShuffleMapStage中最后一个RDD的分区数量。

 

(4)同一个stage的task之间并行执行,不同stage的task遵循stage的顺序。

 

(5)只有Task才会发送到spark Excutor中执行,涉及到数据计算。其它的概念都只存在于ApplicationMaster中。

3.在PySparkShell尝试以下代码,观察执行结果,理解sc,RDD,DAG。请画出相应的RDD转换关系图。

 

my.txt

 

运行spark程序

RDD转换关系图

 

posted @ 2022-03-13 15:52  anonyme=  阅读(40)  评论(0)    收藏  举报