SparkContext
[睡着的水-hzjs-2016.8.20]
一、SparkContext
---1、Spark 程序在运行的时候分为Driver 和 Executors 两部分;
---2、Spark 的程序编写时基于SparkContext的,集体来说包含两方面:
a) Spark 编程的核心基础RDD,是由SparkContext 来最初创建的(第一个RDD,一定是由SparkContext来创建的); b) Spark 程序的调度优化也是基于SparkContext 的;
---3、Spark程序的注册是通过SparkCount实例化的时候产生的对象来完成的(其实是SchedulerBackend来注册程序)
---4、spark程序运行的时候要通过Cluster Manager 获取具体的计算资源,计算资源的获取也是通过SparkContext产生的对象来申请的(其实是Schedulerbackend来获取计算资源的);
---5、SparkContext 崩溃或者结束的时候,整个Spark程序就结束。
###总结:Spark程序是通过SparkContext发布到Spark集群的;Spark 程序的运行都是在SparkContext为核心的调度器的指挥下进行的;Spark程序的结束是以SparkContext结束作为结束。
二、SparkContext核心
1、构建的三个核心对象:
---DAGScheduler:是面向job的Stage的高层调度器
---TaskScheduler:是一个接口,更具体的Cluster Manager 的不同会有不同的实现,Standalone模式下具体的实现是TaskSchedulerImpl
---SchedulerBackend:是一个接口,更具体的Cluster Manager 的不同会有不同的实现,Standalone模式下具体的实现是SparkDeploySchedulerbackend;
2、从整个程序运行的角度来讲,SparkContext包含滴答核心对象:DAGScheduler
TaskScheduler、SchedulerBackend、MapOutputTrackerMaster.
createTaskScheduler:
在Scheduler.initialize 调用的时候会创建SchedulerPool:
3、SparkDeploySchedulerbackend有三大核心功能:
a、负责与Master连接注册当前程序
b、接收集群中为当前应用程序而分配的计算资源Executor的注册并管理Executors;
c、负责发送Task到具体的Executor执行
补充说明:他是由TaskSchedulerImpl来管理的
----当通过SparkDeploySchedulerbackend注册程序给Master的时候,会把下述command提交给master.master发指令给worker去启动Executor所在的进程的时候会加载mian 方法所在的入口类就是command 中的CoarseGraniedExecutorbackend,当然你可以实现自己的ExecutorBackend.在CoarseGrainedExecutorbackend中启动Executor (Executor是先注册在实例化),再并发线程执行Task
流程图: