文档章节

Spark1.3.0核心源码分析,第一篇sparkContext初始化

daerFriend
 daerFriend
发布于 2017/06/15 23:59
字数 945
阅读 25
收藏 0

一. Spark核心框架吗原理图像分析

二、Spark源码分析

    写过Spark的朋友,我想大家都知道,当我们写好自己的Spark程序的时候,会打包成jar包的形式提交到Spark应用机器上,只是将程序提交到Spark应用机器这只是第一步,接着我们会写一个shell脚本来提交我们自己写个Spark开发程序,在这里我们说的是standalone模式,我们在用standalone模式提交时,会通过反射的方式,创建和构造一个driverActor进程。

    大家都知道我们在写自己的Spark应用程序的时候第一行都会写上

            SparkConf conf = new SparkConf()

                            .setAppName("");

               JavaSparkContext sc =new JavaSparkContext();(用Java语言写就用JavaSparkContext,用scala语言写用SpartContext)

写着两行只要进行SparkContext初始化,在SparkContext初始化中一般Spark源码会做两件事,也就是创建出DAGScheduler和TaskScheduler

    1)创建TaskScheduler Spark底层源码分析

        在Spark1.30源码中进行SparkContext初始化时,会找到SpartContext类中createTaskScheduler方法,

 

早createTaskScheduler中找到case SPATK_REGEX(sparkUrl),此为我常用的Standalocal方式

在这段代码中其是主要做了三件事

        第一  new了一个TaskSchulerImpl对象,其实这个就是TaskScheduler(暂不分析 )

 

        第二 new一个SparkDeploySchedulerBackend,实际会负责与master注册,Executor的反注册,task发送到excutor等操作

        第三 创建SchedulePool,它有不同的优先策略,比如FIFO

创建完了三个组件后就会执行通过TaskSchulerImpl调用其start方法,在start()中第一行就会通过backend对象调用其SparkDeploySchedulerBackend中start(),如图:

    在SparkDeploySchedulerBackend的start()中,new了一个ApplicationDescrption,这个ApplicationDescrption非常重要它代表了当前application执行状况,其中包含了最大需要多少cup core,每个slave上需要多少内存 等信息,然后又new了一个AppClient,通过client对象调用AppClient的start(),

AppClient是一个接口,它负责人application与Spark之间的通信,同时接受了一个master的url地址,以及一个applicationDescription和一个集群事件监听器,以及各种事件发生时,监听器回调函数,如图:

在start()方法中,主要创建了一个actor线程,如图:

然后,会找打ClientActor类(内部类),执行preStart(),找到registerWithMaster()方法,此方法即为注册方法 如图:

在registerWithMaster(),第一步就是调用了tryRegisterAllMaster()方法,在tryRegisterAllMaster()中它首先通过logInfo()方法连接到所有的master,在获取到master的actor,通过actor向master发送RegisterApplication信息,如图:

  2)创建DAGScheduler spark源码分析

    

DAGScheduler是一个实现面向stage调度机制的高级调度层,它会为每一个stage计算一个ADG(有向无环图),还会去追踪stage和RDD是否会被物化(也就是是否写入物理磁盘或内存上),并且寻找一个最优的调度机制来运行job,它会将stage作为tasksets提交到底层的taskSchedulerImpl。来在集群运行他们的(task),除了处理stage的DGA,它还负责决定运行每个task的最佳位置。基于当前的缓存的状态,将这些最佳位置交给底层的taskschedulerImpl
此外,它会处理shuffle输出文件丢失导致的失败,在这种情况下,旧的stage会重新提交,一个stage内部失败,不是因为shuffle文件丢失导致,会被taskschudeler处理,会多次重试每个task,直到最后实在不行,才会取消整个stage.

到此为止,为SparkContext初始化的大致原理与过程!!!

由于本人水平有限,以上有什么分析不到位的地方,和错误的地方,请大家多多指正和包涵!!!!!

 

© 著作权归作者所有

daerFriend
粉丝 1
博文 6
码字总数 25694
作品 0
程序员
私信 提问
Spark如何使用Akka实现进程、节点通信的简明介绍

《深入理解Spark:核心思想与源码分析》一书前言的内容请看链接《深入理解SPARK:核心思想与源码分析》一书正式出版上市 《深入理解Spark:核心思想与源码分析》一书第一章的内容请看链接《第...

beliefer
2016/04/05
0
0
Spark中常用工具类Utils的简明介绍

《深入理解Spark:核心思想与源码分析》一书前言的内容请看链接《深入理解SPARK:核心思想与源码分析》一书正式出版上市 《深入理解Spark:核心思想与源码分析》一书第一章的内容请看链接《第...

beliefer
2016/03/16
0
0
SparkContext的初始化(季篇)——测量系统、ContextCleaner等组件介绍

《深入理解Spark:核心思想与源码分析》一书前言的内容请看链接《深入理解SPARK:核心思想与源码分析》一书正式出版上市 《深入理解Spark:核心思想与源码分析》一书第一章的内容请看链接《第...

beliefer
2016/03/08
0
0
SparkContext的初始化(叔篇)——TaskScheduler的启动

《深入理解Spark:核心思想与源码分析》一书前言的内容请看链接《深入理解SPARK:核心思想与源码分析》一书正式出版上市 《深入理解Spark:核心思想与源码分析》一书第一章的内容请看链接《第...

beliefer
2016/02/29
0
0
SparkContext的初始化(伯篇)——执行环境与元数据清理器

《深入理解Spark:核心思想与源码分析》一书前言的内容请看链接《深入理解SPARK:核心思想与源码分析》一书正式出版上市 《深入理解Spark:核心思想与源码分析》一书第一章的内容请看链接《第...

beliefer
2016/02/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
779
11
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
15
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
6
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部