Spark之SparkContext

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.

Spark之SparkContext_第1张图片

createTaskScheduler:

Spark之SparkContext_第2张图片

在Scheduler.initialize 调用的时候会创建SchedulerPool:

Spark之SparkContext_第3张图片

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


流程图:

Spark之SparkContext_第4张图片

Spark之SparkContext_第5张图片




你可能感兴趣的:(spark,SparkContext,Spark的任务调度,任务流程,Spark)