设为首页 加入收藏

TOP

1,Spark内核源码深度剖析
2019-04-16 01:16:17 】 浏览:61
Tags:Spark 内核 源码 深度 剖析

1,Spark内核源码深度剖析

要求:1、已经达到可以熟练进行Spark编程的程度。2、Spark内核源码的研究,是Spark学习的承上启下阶段。3、内核源码研究透彻之后,才可以通往Spark高手 / Spark精通的道路。4、才可以继续进行Spark性能优化的学习。5、才可以在实际工作中,在Spark应用报错出现故障时,读懂log,通过log分析问题的原因,甚至根据log直接到源码中寻找答案,最后解决线上故障。

spark内核架构:1、Application2、spark-submit3、Driver4、SparkContext5、Master6、Worker7、Executor8、Job9、DAGScheduler10、TaskScheduler11、ShuffleMapTask and ResultTask把编写的应用程序提交到spark应用的机器上

Application(自己的Spark程序)
spark-submit(shell)Spark-submit使用我们之前一直使用的那种提交模式去提交的时候,我们之前的提交模式,叫做Standalone,其实会通过反射的方式,创建和构建一个DriverActor进程出来。
Driver(进程)执行我们的Application应用程序,也就是我们自己编写的代码。
大家回想一下,我们所有之前编写的spark应用的第一行是什么?是不是先构建SparkConf,再构建SparkContext。

SparkContextSparkContext在初始化的时候,做到最重要的两件事情,就是构造出DAGScheduler和TaskScheduler。

DAGScheduler每执行到一个action,就会创建一个job,然后把这个job,会提交给DAGScheduler,
DAGScheduler会将job划分为多个stage,然后每个stage创建一个TaskSet
TaskScheduler它有着自己的后台进程
TaskScheduler实际上,是会负责,通过它对应的一个后台进程,去连接Master,向Master注册Application
taskScheduler会把TaskSet里每一个task提交到executor上执行(task分配算法)
MasterMaster接收到Application注册的请求之后,会使用自己的资源调度算法,在spark集群的Worker上,为这个Application启动多个Executor。
master通知worker启动Executor
Workerworker会为Application启动Executor
Executor(进程[其实是个对象])Executor里面有个线程池:executor,每接收到一个task,都会用TaskRunner来封装task,然后从线程池里取出一个线程,执行这个task。
executor启动后,会自己反向注册到taskScheduler上
taskRunner将我们编写的代码,也就是要执行的算子以及函数,拷贝,反序列化,然后执行task。
task有两种:shuffleMapTask和ResultTask。只有最后一个stage是ResultTask,之前的stage,就是shuffleMapTask。
Executor所有Executor都反向注册到Driver上之后,Driver结束SparkContext初始化,会继续执行我们自己编写的代码。
所以,最后整个spark应用程序的执行,就是stage分批次作为taskset提交到executor执行,每个task针对RDD的一个partition,以此类推,直到所有操作执行完成为止。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Spark学习—— (1) 原理介绍 下一篇Spark之   Spark Streaming..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目