首先会将jar包上传到机器(服务器上)
    1.在这台机器上会产生一个Application(也就是自己的spark程序)
    2.然后通过spark-submit(shell) 提交程序的时候
        2.1会启动一个driver(进程):spark-submit使用我们之前一直使用的那种提交模式去提交的时候,我们之前的提交模式,叫做Standalone,其实会通过反射的方式,创建和构造一个DriverActor进程出来
        driver进程会执行我们的Application应用程序(也就是我们自己编写的代码)
            我们在编写的所有spark应用程序的第一行:都是下构造sparkconf和SparkContext
            2.1.1SparkContext:在初始化的时候,做的最重要的两件事就是构造出来DAGSchedulerTaskScheduler        
                2.1.1.2DAGScheduler
                        2.1.1.2.1然后开始继续执行我们自己编写的代码。
                            每当执行到一个action算子就会生成一个job并且把这个job提交给DAGScheduler
                        2.1.1.2.2而此时DAGScheduler会将job划分为多个stage,然后每个stage创建一个Taskset
                        2.1.1.2.3并且会把Taskset提交到 TaskScheduler上
                        2.1.1.2.4而TaskScheduler会把Taskset里的每一个task提交到Executor上
                        2.1.1.2.5此时的Executor中会有一个线程池。 当Executor每接收到一个task时,都会用TaskRunner来封装task,然后从线程池里取出一个线程,执行这个task
TaskRunner:会将我们编写的代码,也就是执行的算子以及函数,拷贝、反序列化,然后执行task
Task有两种:ShuffleMapTask和ResultTask只有最后一个stage是ResultTask,之前的所有stage都是ShuffleMapTask。
 
所以最后整个spark应用程序的执行,就是stage分批次作为taskset提交到Executor执行,每个task针对RDD的一个partition,并行的执行我们定义的算子和函数。以此类推知道所有操作执行完成为止
 
                2.1.1.1TaskScheduler(有自己的后台进程)
                    TaskScheduler实际上,会负责通过它对应的一个后台进程,去连接Master
                    然后向Master注册Application
                2.1.1.1.1Master
                    当master接收到注册的Application时,会使用自己的资源调度算法,在spark集群的worker上,为这个application启动多个Executor
                2.1.1.1.2Worker
                    而此时Worker会为Application启动Executor(进程)
                2.1.1.1.3Executor
                    而当executor启动之后,会自己反向注册到TaskScheduler上去
                    当所有的Executor都反向注册到Driver上之后,Driver结束SparkContext初始化,
            
                            
 
 
 
 
 
 

小记--------spark内核架构原理分析的更多相关文章

  1. 小记--------spark的worker原理分析及源码分析

     

  2. springMVC课程笔记(一)springMVC架构原理分析

    一.springMVC架构原理分析 1.先搞清楚什么是springMVC: 其实springMVC是spring框架中的一个模块,springMVC和spring无需通过中间整合层整合,SpringM ...

  3. Spark之Task原理分析

    在Spark中,一个应用程序要想被执行,肯定要经过以下的步骤:          从这个路线得知,最终一个job是依赖于分布在集群不同节点中的task,通过并行或者并发的运行来完成真正的工作.由此可见 ...

  4. 11、spark内核架构剖析与宽窄依赖

    一.内核剖析 1.内核模块 1.Application 2.spark-submit 3.Driver 4.SparkContext 5.Master 6.Worker 7.Executor 8.Jo ...

  5. 01、Spar内核架构原理

        附件列表

  6. Spark- Spark内核架构原理和Spark架构深度剖析

    Spark内核架构原理 1.Driver 选spark节点之一,提交我们编写的spark程序,开启一个Driver进程,执行我们的Application应用程序,也就是我们自己编写的代码.Driver ...

  7. 大数据体系概览Spark、Spark核心原理、架构原理、Spark特点

    大数据体系概览Spark.Spark核心原理.架构原理.Spark特点 大数据体系概览(Spark的地位) 什么是Spark? Spark整体架构 Spark的特点 Spark核心原理 Spark架构 ...

  8. Spark运行时的内核架构以及架构思考

    一: Spark内核架构 1,Drive是运行程序的时候有main方法,并且会创建SparkContext对象,是程序运行调度的中心,向Master注册程序,然后Master分配资源. 应用程序: A ...

  9. (升级版)Spark从入门到精通(Scala编程、案例实战、高级特性、Spark内核源码剖析、Hadoop高端)

    本课程主要讲解目前大数据领域最热门.最火爆.最有前景的技术——Spark.在本课程中,会从浅入深,基于大量案例实战,深度剖析和讲解Spark,并且会包含完全从企业真实复杂业务需求中抽取出的案例实战.课 ...

随机推荐

  1. Python GDAL

    https://gdal.org/ https://pypi.org/project/GDAL/ gdal whl:https://blog.csdn.net/u012581929/article/d ...

  2. BOM基础笔记

    BOM基础 BOM对浏览器的一些操作 1.打开.关闭窗口 •open –蓝色理想运行代码功能 window.open('http://www.baidu.com/', '_self'); <!d ...

  3. js输入密文弹出数字键盘

    我们经常被产品要求,在移动端的web页面上的输入框输入密码时要弹出数字键盘,而不是全键盘,这个该怎么实现呢? 1.首先要弹出数字键盘,我们只能把input框的type从password改为tel 2. ...

  4. java生成10个不相等的1-20的随机数

    public class Test { public static void main(String[] args){ Random ran = new Random(); Set <Integ ...

  5. 通过JS给HTML元素增加、删除和获取属性内容

    1.通过ID或者其他元素找到要处理的HTML对象:(举例通过ID) var obj=document.getElementById('id');12.操作此对象 添加属性:obj.setAttribu ...

  6. Python3并发写文件

    使用python2在进行并发写的时候,发现文件会乱掉,就是某一行中间会插入其他行的内容. 但是在使用python3进行并发写的时候,无论是多进程,还是多线程,都没有出现这个问题,难道是python3的 ...

  7. [学习笔记] Tangent Distance

    Tangent Distance 简介 切空间距离可以用在KNN方法中度量距离,其解决的是图像经过有限变换之后还能否被分类正确,例如.对一张数字为5的手写数字图片,将其膨胀后得到图像p1,此时KNN还 ...

  8. Vue踩坑系列

    前言 前端开发对于vue的使用已经越来越多,它的优点就不做介绍了, 本篇是我对vue使用过程中遇到的问题中做的一些总结,帮助大家踩坑.如果喜欢的话可以点波赞,或者关注一下,希望本文可以帮到大家!!! ...

  9. 美化Eclipse-背景

    为了美化Eclipse,请登录主题网站http://www.eclipsecolorthemes.org/ 下载EPF配置文件(截图如下),并导入eclispe即可. 导入方法: (1)从File菜单 ...

  10. for...in 与 for...of

    在js中, 对于Object,一般for...in 来进行迭代,不能使用for...of     // let obj = {a:1,b:2} for(let i of obj){console.lo ...