1.Spark是怎么做内存计算的? DAG的作用? Stage阶段划分的作用?
1.Spark会产生DAG图
2.DAG图会基于分区和宽窄依赖关系划分阶段
3.一个阶段的内部都是窄依赖,窄依赖内,如果形成前后1:1的分区对应关系,就可以产生许多内存迭代计算的管道
4.这些内存迭代计算的管道,就是一个个具体的执行Task
5.一个Task是一个具体的线程,任务跑在一个线程内,就是走内存计算了.
2: Spark为什么比MapReduce快?
Spark的算子丰富, MapReduce算子匮乏(Map和Peduce),MapReduce这个编程模型,很难在一套MR中处理复杂的任务.很多的复杂任务,是需要写多个MapReduce进行串联.多个MR串联通过磁盘交互数据
Spark可以执行内存迭代,算子之间形成DAG基于依赖划分阶段后,在阶段内形成内存迭代管道.但是MapReduce的Map和Reduce之间交互依旧是通过硬盘来交互的.
3:spark运行层级关系梳理:
1.一个Spark环境可以运行多个Application
2.一个代码运行起来,会成为一个Application
3.Application内部可以有多个Job
4.每个Job由一个Action产生,并且每个Job有自己的DAG执行图5.一个Job的DAG图会基于宽窄依赖划分成不同的阶段
6.不同阶段内基于分区数量,形成多个并行的内存迭代管道
7.每一个内存迭代管道形成一个Task(DAG调度器划分将Job内划分出具体的task任务,一个Job被划分出来的task在逻辑上称之为这个job的taskset)