@[Spark架构]

@[Spark架构]_第1张图片
并行化是将工作负载分在不同线程或不同节点上执行的子任务.
Spark的工作负载的划分由RDD分区决定。
@[Spark架构]_第2张图片
编写程序提交到Master上,
Master是由四大部分组成(RDD Graph,Scheduler,Block Tracker以及Shuffle Tracker)

启动RDD Graph就是DAG,它会提交给Task Scheduler任务调度器等待调度执行

具体执行时,Task Scheduler会把任务提交到Worker节点上
Block Tracker用于记录计算数据在Worker节点上的块信息

Shuffle Blocker用于记录RDD在计算过程中遇到Shuffle过程时会进行物化,Shuffle Tracker用于记录这些物化的RDD的存放信息。

@[Spark架构]_第3张图片
宽依赖对应shuffle,要将同一个父RDD的分区传入到不同的子RDD分区中。
窄依赖的每个父RDD的分区只会传入到一个子RDD分区中,通常可以在一个节点内完成转换。
@[Spark架构]_第4张图片
DAG Scheduler完成下面三个
1.为每个Job(一个Action类型的操作如collect,count)分割Stage,同时决定最佳路径。DAGScheduler会记录哪个RDD或者Stage会被物化,从而寻找一个最佳调度方案。
2.将TaskSet提交给Task Tracker
3.重新提交输出lost的Stage任务

DAGScheduler优化
1.stage的操作是pipleline的
2. 基于Partition选择最小化的join算法,减少Shuffle操作
3. 重用RDD Cache过的数据

@[Spark架构]_第5张图片
AB位于同一个Stage,CDE位于同一个Stage。AB和CDE的结果做Join是产生了一个新的Stage
如下两个阶段一定会产生Stage
1.从数据源加载数据形成RDD时,一定会有Stage的产生
2.进行Shuffle,即有宽依赖的时候一定有Stage的产生,所以上面的DE应该产生一个Stage。

你可能感兴趣的:(spark架构)