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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了打通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(schedulerscmasterUrls)
  scheduler.initialize(backend)
  (backendscheduler)

在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]


本文出自 “一枝花傲寒” 博客,谢绝转载!

以上是关于打通Spark系统运行内幕机制循环流程(DT大数据梦工厂)的主要内容,如果未能解决你的问题,请参考以下文章

Spark 1.6 RPC内幕解密:运行机制源码详解Netty与Akka等(DT大数据梦工厂)

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

Spark Executor内幕彻底解密(DT大数据梦工厂)

Spark Runtime(DriverMassterWorkerExecutor)内幕解密(DT大数据梦工厂)

Spark on Yarn彻底解密(DT大数据梦工厂)

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