`

35.Spark系统运行内幕机制循环流程

阅读更多

一:TaskScheduler原理解密

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

2,  SparkContext实例化的时候通过createTaskScheduler来创建TaskSchedulerImplSparkDEploySchedulerBackend:

 

caseSPARK_REGEX(sparkUrl) =>
valscheduler = new TaskSchedulerImpl(sc)
valmasterUrls = sparkUrl.split(",").map("spark://" + _)
valbackend = new SparkDeploySchedulerBackend(scheduler, sc, masterUrls)
scheduler.initialize(backend)
(backend
, scheduler)

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

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

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

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

c)         DAGScheduler汇报执行情况,包括在Shuffle输出lost的时候报告fetch failed错误等信息;

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

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

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

 

大总结:在SparkContext实例化的时候调用createTaskScheduler来创建TaskSchedulerImplSparkDeploySchedulerBackend,同时在SparkContext实例化的时候会调用TaskSchedulerImplstart,在start方法中会调用SparkDeploySchedulerBackendstart,在该start方法中会创建AppClient对象并调用AppClient对象的start方法,在该start方法中会创建ClientEndpoint,在创建ClientEndpoint会传入Command来指定具体为当前应用程序启动的Executor进行的入口类的名称为CoarseGrainedExecutorBackend,然后ClientEndpoint启动并通过tryRegisterMaster来注册当前的应用程序到Master中,Master接受到注册信息后如何可以运行程序,则会为该程序生产Job ID并通过schedule来分配计算资源,具体计算资源的分配是通过应用程序的运行方式、Memorycores等配置信息来决定的,最后Master会发送指令给WorkerWorker中为当前应用程序分配计算资源时会首先分配ExecutorRunnerExecutorRunner内部会通过Thread的方式构建ProcessBuilder来启动另外一个JVM进程,这个JVM进程启动时候加载的main方法所在的类的名称就是在创建ClientEndpoint时传入的Command来指定具体名称为CoarseGrainedExecutorBackend的类,此JVM在通过ProcessBuilder启动的时候获得了CoarseGrainedExecutorBackend后加载并调用其中的main方法,在main方法中会实例化CoarseGrainedExecutorBackend本身这个消息循环体,而CoarseGrainedExecutorBackend在实例化的时候会通过回调onStartDriverEndpoint发送RegisterExecutor来注册当前的CoarseGrainedExecutorBackend,此时DriverEndpoint收到到该注册信息并保存在了SparkDeploySchedulerBackend实例的内存数据结构中,这样Driver就获得了计算资源!

 

0
1
分享到:
评论

相关推荐

    4.Spark运行架构.pdf

    4.Spark运行架构.pdf 5.Hive(上)--Hive介绍及部署.pdf 5.Hive(下)--Hive实战.pdf 6.SparkSQL(上)--SparkSQL简介.pdf 6.SparkSQL(下)--Spark实战应用.pdf 6.SparkSQL(中)--深入了解运行计划及调优.pdf 7....

    hive-exec-1.2.1.spark2.jar

    hive-exec-1.2.1.spark2.jar spark2-shell 支持 hive2 hadoop3

    org.mongodb.spark:mongo-spark-connector_2.11:1.1.0

    mongodb-spark官方连接器,运行spark-submit --packages org.mongodb.spark:mongo-spark-connector_2.11:1.1.0可以自动下载,国内网络不容易下载成功,解压后保存到~/.ivy2目录下即可。

    8.SparkMLlib(下)--SparkMLlib实战.pdf

    4.Spark运行架构.pdf 5.Hive(上)--Hive介绍及部署.pdf 5.Hive(下)--Hive实战.pdf 6.SparkSQL(上)--SparkSQL简介.pdf 6.SparkSQL(下)--Spark实战应用.pdf 6.SparkSQL(中)--深入了解运行计划及调优.pdf 7....

    8.SparkMLlib(上)--机器学习及SparkMLlib简介.pdf

    4.Spark运行架构.pdf 5.Hive(上)--Hive介绍及部署.pdf 5.Hive(下)--Hive实战.pdf 6.SparkSQL(上)--SparkSQL简介.pdf 6.SparkSQL(下)--Spark实战应用.pdf 6.SparkSQL(中)--深入了解运行计划及调优.pdf 7....

    1.Spark及其生态圈简介.pdf

    4.Spark运行架构.pdf 5.Hive(上)--Hive介绍及部署.pdf 5.Hive(下)--Hive实战.pdf 6.SparkSQL(上)--SparkSQL简介.pdf 6.SparkSQL(下)--Spark实战应用.pdf 6.SparkSQL(中)--深入了解运行计划及调优.pdf 7....

    9.SparkGraphX介绍及实例.pdf

    4.Spark运行架构.pdf 5.Hive(上)--Hive介绍及部署.pdf 5.Hive(下)--Hive实战.pdf 6.SparkSQL(上)--SparkSQL简介.pdf 6.SparkSQL(下)--Spark实战应用.pdf 6.SparkSQL(中)--深入了解运行计划及调优.pdf 7....

    2.Spark编译与部署(下)--Spark编译安装.pdf

    4.Spark运行架构.pdf 5.Hive(上)--Hive介绍及部署.pdf 5.Hive(下)--Hive实战.pdf 6.SparkSQL(上)--SparkSQL简介.pdf 6.SparkSQL(下)--Spark实战应用.pdf 6.SparkSQL(中)--深入了解运行计划及调优.pdf 7....

    2.Spark编译与部署(中)--Hadoop编译安装.pdf

    4.Spark运行架构.pdf 5.Hive(上)--Hive介绍及部署.pdf 5.Hive(下)--Hive实战.pdf 6.SparkSQL(上)--SparkSQL简介.pdf 6.SparkSQL(下)--Spark实战应用.pdf 6.SparkSQL(中)--深入了解运行计划及调优.pdf 7....

    hive-jdbc-1.2.1.spark2.jar

    hive-jdbc-1.2.1.spark2.jar

    7.SparkStreaming(上)--SparkStreaming原理介绍.pdf

    4.Spark运行架构.pdf 5.Hive(上)--Hive介绍及部署.pdf 5.Hive(下)--Hive实战.pdf 6.SparkSQL(上)--SparkSQL简介.pdf 6.SparkSQL(下)--Spark实战应用.pdf 6.SparkSQL(中)--深入了解运行计划及调优.pdf 7....

    2.Spark编译与部署(上)--基础环境搭建.pdf

    4.Spark运行架构.pdf 5.Hive(上)--Hive介绍及部署.pdf 5.Hive(下)--Hive实战.pdf 6.SparkSQL(上)--SparkSQL简介.pdf 6.SparkSQL(下)--Spark实战应用.pdf 6.SparkSQL(中)--深入了解运行计划及调优.pdf 7....

    7.SparkStreaming(下)--SparkStreaming实战.pdf

    -IDEA搭建及实战.pdf4.Spark运行架构.pdf5.Hive(上)--Hive介绍及部署.pdf5.Hive(下)--Hive实战.pdf6.SparkSQL(上)--SparkSQL简介.pdf6.SparkSQL(下)--Spark实战应用.pdf6.SparkSQL(中)--深入了解运行计划...

    3.Spark编程模型(下)--IDEA搭建及实战.pdf

    4.Spark运行架构.pdf 5.Hive(上)--Hive介绍及部署.pdf 5.Hive(下)--Hive实战.pdf 6.SparkSQL(上)--SparkSQL简介.pdf 6.SparkSQL(下)--Spark实战应用.pdf 6.SparkSQL(中)--深入了解运行计划及调优.pdf 7....

    3.Spark编程模型(上)--概念及SparkShell实战.pdf

    4.Spark运行架构.pdf 5.Hive(上)--Hive介绍及部署.pdf 5.Hive(下)--Hive实战.pdf 6.SparkSQL(上)--SparkSQL简介.pdf 6.SparkSQL(下)--Spark实战应用.pdf 6.SparkSQL(中)--深入了解运行计划及调优.pdf 7....

    High.Performance.Spark.Best.Practices.for.Scaling.and.Optimizing.Apache.Spark.

    High.Performance.Spark.Best.Practices.for.Scaling.and.Optimizing.Apache.Spark. High.Performance.Spark.Best.Practices.for.Scaling.and.Optimizing.Apache.Spark.

    Apress.Pro.Spark.Streaming.The.Zen.of.Real-Time.Analytics.Using.Apache.Spark

    Apress.Pro.Spark.Streaming.The.Zen.of.Real-Time.Analytics.Using.Apache.Spark

    【hive on spark Error】return code 30041 from org.apache.hadoop.hive.ql.exec.spark.SparkTask.

    ERROR : FAILED: Execution Error, return code 30041 from org.apache.hadoop.hive.ql.exec.spark.SparkTask. 前言报错信息异常分析配置改动后记 前言 在成功消除Cloudare管理界面上那些可恶的警告之后,我又对yarn...

    Spark 入门实战系列

    4.Spark运行架构.pdf 5.Hive(上)--Hive介绍及部署.pdf 5.Hive(下)--Hive实战.pdf 6.SparkSQL(上)--SparkSQL简介.pdf 6.SparkSQL(下)--Spark实战应用.pdf 6.SparkSQL(中)--深入了解运行计划及调优.pdf 7....

    6.SparkSQL(下)--Spark实战应用.pdf

    4.Spark运行架构.pdf 5.Hive(上)--Hive介绍及部署.pdf 5.Hive(下)--Hive实战.pdf 6.SparkSQL(上)--SparkSQL简介.pdf 6.SparkSQL(下)--Spark实战应用.pdf 6.SparkSQL(中)--深入了解运行计划及调优.pdf 7....

Global site tag (gtag.js) - Google Analytics