Spark内核分析之SparkContext初始化源码分析
上一篇介绍了spark作业提交的三种方式,从本篇开始逐一介绍Spark作业运行流程中各个组件的内部工作原理。如标题所说,我们先来看看SparkContext在Spark作业提交后做了哪些事情,工作流程如下图所示;(注意:本篇文章及后续源码分析所有内容全部基于spark1.3.0源码进行分析,后续不再赘述)
![](https://img.haomeiwen.com/i7486779/7d60aba9152b8d7f.png)
1.Spark作业提交以后,通过SparkContext的createTaskScheduler()方法来初始化scheduler(TaskSchedulerImpl)和backend(SparkDeploySchedulerBackend)对象;
2.通过scheduler的initialize()方法初始化其对应的线程池;
3.调用scheduler的start()方法,在scheduler的start()方法内部调用backend的start()方法;
4.在backend的start()方法内部,创建AppClient对象,并通过该对象的start()方法调用RegisterWithMaster方法,通过该方法向Master请求注册;
5.Master调用worker,worker启动executor后向backend注册信息;
下面附上源码部分截图;
![](http://upload-images.jianshu.io/upload_images/7486779-2dc8bea2a36c9560.png)
![](http://upload-images.jianshu.io/upload_images/7486779-88a4e77775a0f81b.png)
![](http://upload-images.jianshu.io/upload_images/7486779-88db62076c4e0fc2.png)
![](http://upload-images.jianshu.io/upload_images/7486779-1d8c1359ec4e78ee.png)
![](http://upload-images.jianshu.io/upload_images/7486779-4da1da379a5fbbf1.png)
![](http://upload-images.jianshu.io/upload_images/7486779-a0e056e057e65c51.png)
![](http://upload-images.jianshu.io/upload_images/7486779-8c2b23fdb194fea7.png)
以上即为SparkContext的初始化过程,在这个过程中同时也初始化了两外两个重要的组建,分别为DAGScheduler和Spark UI;启动DAGScheduler底层是基于DAGSchedulerEventProcessActor进行通信的,SparkUI是通过底层的jetty服务器来提供web服务的;针对这两个组件后续会有详细讲解。
总结:以上即为SparkContext的初始化过程,源码涉及的类有:SparkContext,TaskSchedulerImpl,SparkDeploySchedulerBackend,AppClient等,有兴趣的可以查看所有详细实现。欢迎关注。
如需转载,请注明: