Spark的调度模块分:DAGScheduler和TaskScheduler。
(一) DAGScheduler模块:
主要负责分析用户提交的应用,并根据计算任务的依赖关系建立DAG,然后将DAG划分为不同的Stage(阶段),其中每一个Stage都是由可以并发的一组Task组成,每一个阶段的Task执行逻辑完全相同,只是作用于不同的数据上罢了。DAGScheduler将每一阶段的Task划分完毕之后,会将这组Task提交到TaskScheduler
(二)TaskScheduler模块:
TaskScheduler通过Cluster Manager在集群中的某个Worker上启动Executor,在Executor中执行任务。
Spark的容错:
如果RDD1->RDD2->RDD3... 如果RDD2计算完毕,RDD被缓存起来,如果RDD2中的Partion2是由RDD1中的Partion2计算而来,当RDD2中的Partion2缓存丢失时候不会从新计算RDD1的所有Partion。而是只执行RDD1中的Partion2,将计算结果传递给RDD2中的Partion2。这个过程是根据Linage信息(Lineage可以理解为:RDD含有如何从其他RDD衍生出来的 本RDD的信息(这个信息就是Lineage))由于Spark是内容计算模型,一般都可以认为计算的数据都在内存中,所以容错是在内容中发生的:Tachyon是一个内容文件系统。
关于Tachyon:
(一)Tachyon是一个分布式内存文件系统,可以在集群里以访问内存的速度来访问存在tachyon里的文件。
(二)Tachyon容错:
Tachyon集群的元数据容错,类似于Hadoop中的NameNode的元数据容错。
Tachyon的另一个容错是这个机制类似于RDD的Lineage, Tachyon会保留生成数据的Lineage,在数据丢失时候通过Lineage来恢复数据。
补充:关于Lineage的个人理解:Lineage有点类似一个计算序列的公式,每一步计算都会把结果保存起来,如果在当前计算时有数据丢失会根据公式从新返回到某一步(这一步恰好是产生丢失数据的一步)。然后从这一步执行计算把丢失的数据计算出来。(所以:Lineage就是一种过程的描述信息(Log),根据这个信息实现容错)