【Spark】SparkContex原理剖析

哈哈!从今天开始认真学习Spark了

SparkContext原理剖析

初始化的工作机制如图:

1).TaskSchedule:

《【Spark】SparkContex原理剖析》 关于TaskScheduler

第一步:创建TaskSchedulerImpl()、SparkDeploySchedulerBackend()实际上负责与Masterd的注册、Executor的反注册、task发送到Executor等操作。TaskSchedulerImpl()底层基于SparkDeploySchedulerBackend()来工作,而SchedulerPool有不同的优先策略(FIFO)。

第二步:TaskSchedulerImpl()会调用start()方法,再继续调用SparkDeploySchedulerBackend()的start()方法,然后创建AppClient(它是一个接口,负责为application与spark集群进行通信,它会接收一个spark master的url,以及一个applicationDescription和一个集群事件的监听器,以及各种事件的回调函数),再由AppClient去创建线程ClientActor,调用registerMaster和tryRegisterAllMaster()方法。

第三步:发送RegisterApplication(case class),里面封装了Application的信息。注册到Spark集群的Master节点上,执行Worker,再由Worker发送给Executor,并反向注册到SparkDeploySchedulerBackend()上去。

2).DAGSchedule:

《【Spark】SparkContex原理剖析》 关于 DAGScheduler

DAGSchedule(它实现了面向stage的调度机制的高层次的调度层。会为每个Job计算一个stage的DAG,追踪RDD和stage的输出是否被物化了,并且寻找一个最优调度机制来运行Job。将stage作为taskset提交到底层的TaskSchedulerImpl上,来集群运行task。除了处理stage的DAG,还负责决定运行每个task的最佳位置,基于当前的缓存状态,将这些最佳位置提交给底层的TaskSchedulerImpl。如果由于shuffle输出文件丢失导致的失败,在这种情况下,旧的stage可能就会被重新提交,一个stage内部的失败,如果不是由于shuffle文件丢失所导致的,会被TaskSchedule处理)。主要创建DAGSchedulerEventProcessActor组件,底层基于该组件进行通信(线程)。

3)SparkUI显示application()运行的状态。实际上是通过启动Jetty服务器,来提供web服务,从而显示网页。

    原文作者:果果小姚
    原文地址: https://www.jianshu.com/p/485aeb1e4f3a
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞