Spark内核剖析

我们先将编写的应用程序Application打成jar包,用spark-submit结合shell来提交这个应用程序。如果是StandAlone模式的话会通过反射的方式创建和构造一个Driver进程,driver进程负责运行application应用程序的main函数和创建sparkContext.

Spark Context: 另外一种意义上的Spark入口类,SparkContext相当于连接Spark集群的纽带,并用来在集群中创建RDD、accumulators、broadCast变量.一个JVM只允许有一个SparkContext.所以在创建新的SparkContext之前必须调用stop()来停掉当前活跃的SparkContext(源码注释中标注:该限制将逐渐被移除[Spark-2243], 但是根据言论:动态分配并不能增大Executors的heap memory size, 并且一个JVM中如果跑了多种不同的task,一个Executor也不能同时适应io敏感型、内存敏感型、CPU敏感型的task,遂issue.close()),   SparkContext会创建2个重要的对象分别为DAGScheduler和TaskScheduler 以及Spark的执行环境、SparkUI、以及注册 HeartbeatReceiver 心跳接收器以便Driver进程 完成对Executor的管理.  Task Scheduler实际上会负责通过它的一个后台进程去连接master. 向master注册application. master接收到application注册请求后会使用自己的资源调度算法通知Spark集群的worker上为这个application启动多个executor,(1个worker节点可能启动多个executor) , Executor启动之后会自己反向注册到Task Scheduler上去。 然后程序每执行一个action算子时会产生一个job,这个job会提交给Dag Scheduler, Dag Scheduler会将job划分为多个stage(通过Stage划分算法),每个stage又会创建一个TaskSet, Task Scheduler会把Task Set里每一个task提交到executor上执行(task分配算法) , Executor每接收到一个task,都会用Task Runner来封装Task, 然后从线程池里取出一个线程来封装task. TaskRunner:将我们编写的代码拷贝、反序列化然后执行。

yarn模式:首先spark-submit提交就会发送请求到resourceManager请求启动ApplicationMaster,ResourceManager收到请求后会分配Container在某个NodeManager上启动ApplicationMaster(相当于是Driver),然后ApplicationMaster会找ResourceManager请求Container来启动executor,ApplicationMaster连接其他NodeManger,来启动executor,NM相当于worker,executor启动后就像ApplicationMaster反向注册,

 

Spark主备切换:

当Active Master节点挂掉的时候可以将Standby Master 切换为Active Master, 主备切换有两种机制,一种是基于文件系统的,一种是基于Zookeeper的,基于文件系统的主备切换机制需要在Active Master挂掉之后由我们手动切换到Standby Master上,基于Zookeeper的主备切换机制,可以实现自动切换Master.

Standby Master使用持久化引擎去读取持久化的storedApps、storedDrivers、storedWorkers等信息,判断持久化的信息中如果有任何一个非空就会去将持久化的信息重新注册到Master的内部缓存当中,然后将Application和Worker的状态都修改为UnKnown,

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值