打通Spark系统运行内幕机制循环流程(DT大数据梦工厂)

内容:

1、TaskScheduler工作原理;

2、TaskScheduler源码解密;

Stage里面有一系列任务,里面的任务是并行计算的,逻辑是完全相同的,只不过是处理的数据不同而已。

DAGScheduler会以Task方式提交给TaskScheduler(任务调度器)。

==========TaskScheduler工作原理解密============

1、DAGScheduler在提交TaskSet给底层调度器的时候是面向接口TaskScheduler,这符合面向对象中依赖抽象,而不依赖具体的原则,带来了底层资源调度器的可插拔性,导致Spark可以运行在众多的资源调度器模式上,例如Standalone、YARN、Mesos、Local、EC2以及其它自定义的资源调度器,在Standalone的模式下,我们聚焦于TaskSchedulerImpl;

2、在SparkContext实例化的时候,通过createTaskScheduler来创建TaskSchedulerImpl和SparkDeploySchedulerBackend

case SPARK_REGEX(sparkUrl) =>
  val scheduler = new TaskSchedulerImpl(sc)
  val masterUrls = sparkUrl.split(",").map("spark://" + _)
  val backend = new SparkDeploySchedulerBackend(scheduler, sc, masterUrls)
  scheduler.initialize(backend)
  (backend, scheduler)

在TaskSchedulerImpl的initialize方法中把SparkDeploySchedulerBackend传进来从而赋值为TaskSchedulerImpl的,在TaskSchedulerImpl 调用start方法的时候会调用backend.start方法,在start方法中会最终注册应用程序;

3、TaskScheduler的核心任务是提交TaskSet到集群运算并汇报结果:

1)为TaskSet创建和维护一个TaskSetManager并追踪任务的本地性以及错误信息;

2)遇到Straggle任务的时候会放到其它的节点进行重试;

3)TaskScheduler必须向DAGScheduler汇报执行情况,包括在shuffle输出lost的时候报告fetch fail等信息;

4、TaskScheduler内部会握有SchedulerBackend,从Standalone的模式来讲,具体实现是SparkDeploySchedulerBackend;

5、SparkDeploySchedulerBackend 在启动的时候构造AppClient实例,并在该实例start的时候启动了ClientEndpoint这个消息循环体,ClientEndpoint 在启动的时候会向Master注册当前程序,而SparkDeploySchedulerBackend 的父类CoarseGrainedSchedulerBackend在start的时候会实例化类型为DriverEndpoint(这就是我们程序运行时候经典对象的Driver)的消息循环体,SparkDeploySchedulerBackend专门负责收集Worker上的资源信息,当ExecutorBackend启动的时候会发送RegisterExecutor信息向DriverEndpoint注册,此时SparkDeploySchedulerBackend就掌握了当前应用程序拥有的计算资源,TaskScheduler就是通过SparkDeploySchedulerBackend 拥有的计算资源来具体运行Task;

6、SparkContext、DAGScheduler、TaskSchedulerImpl、SparkDeploySchedulerBackend在应用程序启动的时候,只实例化一次,应用程序存在期间,始终存在这些对象;

大总结:在SparkContext实例化的时候调用createTaskScheduler来创建TaskSchedulerImpl和SparkDeployShedulerBackend,同时在Spark实例化的时候,会调用TaskSchedulerImpl的start,start方法中会调用SparkDeployShedulerBackend的start,在该方法中会创建AppClient对象,并调用AppClient对象的start方法,在该方法中会创建ClientEndpoint,在创建ClientEndpoint会传入Command来指定具体为当前应用程序启动的executor进程的入口类的名称为CoarseGrainedExecutorBackend,然后ClientEndpoint启动并通过tryRegisterMaster来注册当前的应用程序到Master中,Master接收到注册信息后,如果可以运行程序则会为该程序生成JobID,并通过schedule()来分配计算资源,具体计算资源的分配是通过应用程序的运行方式、memory、cores等配置信息来决定,最后Master会发送指令给Worker,Worker为当前应用程序分配计算资源时会首先分配ExecutorRunner,ExecutorRunner内部会通过Thread的方式构建ProcessBuiler来启动另外一个JVM进程,这个JVM进程启动时候加载的main方法所在的类的名称就是在创建ClientEndpoint会传入的Command来指定具体名称为CoarseGrainedExecutorBackend的类,此时,JVM看到在通过ProcessBuilder启动的时候获得了CoarseGrainedExecutorBackend加载并调用里面的main方法,在main方法中会实例化CoarseGrainedExecutorBackend本身这个消息循环体,而CoarseGrainedExecutorBackend在实例化的时候会通过回调onStart向DriverEndpoint发送registerExecutor来注册当前的CoarseGrainedExecutorBackend ,此时DriverEndpoint收到该注册信息并保存在了SparkDeploySchedulerBackend实例的内存数据结构中,这样Driver就获得了计算资源。

作业:

把大总结画流程图。

王家林老师名片:

中国Spark第一人

新浪微博:http://weibo.com/ilovepains

微信公众号:DT_Spark

博客:http://blog.sina.com.cn/ilovepains

手机:18610086859

QQ:1740415547

邮箱:[email protected]

时间: 2024-10-12 23:39:44

打通Spark系统运行内幕机制循环流程(DT大数据梦工厂)的相关文章

[Spark内核] 第35课:打通 Spark 系统运行内幕机制循环流程

本课主题 打通 Spark 系统运行内幕机制循环流程 引言 通过 DAGScheduelr 面向整个 Job,然后划分成不同的 Stage,Stage 是從后往前划分的,执行的时候是從前往后执行的,每个 Stage 内部有一系列任務,前面有分享過,任务是并行计算啦,这是并行计算的逻辑是完全相同的,只不过是处理的数据不同而已,DAGScheduler 会以 TaskSet 的方式把我们一个 DAG 构造的 Stage 中的所有任务提交给底层的调度器 TaskScheduler,TaskSchedu

Spark运行原理和RDD解析(DT大数据梦工厂)

Spark一般基于内存,一些情况下也会基于磁盘 Spark优先会把数据放到内存中,如果内存实在放不下,也会放到磁盘里面的 不单能计算内存放的下的数据,也能计算内存放不下的数据 实际如果数据大于内存,则要考虑数据放置策略和优化算法,因为Spark初衷是一寨式处理 小到5~10台的分布式大到8000台的规模,Spark都能运行 大数据计算问题:交互式查询(基于shell.sparkSQL).批处理.机器学习和计算等等 底层基于RDD,分布式弹性数据级,支持各种各样的比如流处理.SQL.SparkR等

Spark开源框架精彩学习资源分享——DT大数据梦工厂王家林

知识类:https://github.com/JerryLead/SparkInternals(https://github.com/JerryLead/SparkLearning) https://github.com/databricks/spark-knowledgebase https://github.com/knoldus/Play-Spark-Scala 接口类: https://github.com/plaa/mongo-spark https://github.com/data

DT大数据梦工厂第三十五课 Spark系统运行循环流程

本节课内容: 1.     TaskScheduler工作原理 2.     TaskScheduler源码 一.TaskScheduler工作原理 总体调度图: 通过前几节课的讲解,RDD和DAGScheduler以及Worker都已有深入的讲解,这节课我们主要讲解TaskScheduler的运行原理. 回顾: DAGScheduler面向整个Job划分多个Stage,划分是从后往前的回溯过程:运行时从前往后运行的.每个Stage中有很多任务Task,Task是可以并行执行的.它们的执行逻辑完

底层战详解使用Java开发Spark程序(DT大数据梦工厂)

Scala开发Spark很多,为什么还要用Java开发原因:1.一般Spark作为数据处理引擎,一般会跟IT其它系统配合,现在业界里面处于霸主地位的是Java,有利于团队的组建,易于移交:2.Scala学习角度讲,比Java难.找Scala的高手比Java难,项目的维护和二次开发比较困难:3.很多人员有Java的基础,确保对Scala不是很熟悉的人可以编写课程中的案例预测:2016年Spark取代Map Reduce,拯救HadoopHadoop+Spark = A winning combat

DT大数据梦工厂Spark机器学习相关视频资料

大数据未来几年发展的重点方向,大数据战略已经在十八届五中全会上作为重点战略方向,中国在大数据方面才刚刚起步,但是在美国已经产生了上千亿的市场价值.举个例子,美国通用公司是一个生产飞机发动机的一个公司,这家公司在飞机发动机的每一个零部件上都安装了传感器,这些传感器在飞机发动机运作的同时不断的把发动机状态的数据传到通用公司的云平台上,通用公司又有很多数据分析中心专门接受这些数据,根据大数据的分析可以随时掌握每一家航空公司发动机的飞行状况,可以告知这些航空公司发动机的哪些部件需要检修或保养,避免飞机事

IDEA下Spark的开发(DT大数据梦工厂)

IDEA越使用效果越好,快捷键方便,阅读源码方便 一般阅读Spark或者Scala的源码都采用IDEA使用 下载IDEA最新版本的社区版本即可, 安装的时候必须安装Scala,这个过程是IDEA自动化的插件管理,所以点击后会自动下载(跳过在setting plugins里面也可以安装) 本地JAVA8和Scala2.10.4软件套件的安装和Eclipse不同 打开 打开之后点击File->Project Structure来设置工程的Libraries 核心是添加Spark的jar依赖 代码拷贝

Spark Sort-Based Shuffle内幕彻底解密(DT大数据梦工厂)

内容: 1.为什么使用Sorted-Based Shuffle: 2.Sorted-Based Shuffle实战: 3.Sorted-Based Shuffle内幕: 4.Sorted-Based Shuffle的不足: 最常用的Shuffle方式,Sorted-Based Shuffle涉及了大规模Spark开发.运维时核心问题,以及答案的要害所在. 必须掌握这一讲内容. 本课是从Spark初级人才成功升级为Spark中级人才的通道. 稍有水平的大公司,面试内容本讲肯定会涉及. ======

Spark Runtime(Driver、Masster、Worker、Executor)内幕解密(DT大数据梦工厂)

内容: 1.再论Spark集群部署: 2.Job提交解密: 3.Job的生成和接受: 4.Task的运行: 5.再论Shuffle: 从一个作业视角,透过Master.Drvier.Executor来透视Spark Runtime ==========再论Spark集群部署============ 官网中关于集群的部署: 默认情况下,每个Worker下有一个Executor,会最大化的使用内存和CPU. Master发指令给Worker来分配资源,不关心Worker能不能分配到这个资源,他发给多