Spark任务调度

名词解释

Cluster Manager:在Standalone 模式中即为Master(主节点),控制整个集群,监控Worker。在YARN 模式中为资源管理器。在集群上获取资源的外部服务。
Application:用户编写的应用应用程序。
Driver:运行Application 的main() 函数并创建SparkContext,创建SparkContext的目的是和集群的ClusterManager通讯,进行资源的申请、任务的分配和监控等。
Worker:集群中任何可以运行Application代码的节点,类似于YARN中的NodeManager节点。在Standalone模式中指的就是通过Slave文件配置的Worker节点,在Spark on Yarn模式中指的就是NodeManager节点。
Job:一个Spark job由一个或者多个stage组成,一个Application可以产生多个Job。
Stage:每个Job的Task被拆分成很多组Task(DAGScheduler将job拆分为不同的stage), 作为一个TaskSet,命名为Stage。
Task:被送到Executor执行的工作单元,是运行Application的基本单位。多个Task组成一个Stage,而Task的调度和管理由TaskScheduler负责。
Executor:执行器,在 workernode 上执行任务(Task)的组件、用于启动线程池运行任务。每个Application拥有独立的一组Executors。
DAGScheduler:根据Job构建基于Stage的DAG(有向无环任务图),并提交Stage给TaskScheduler
TaskScheduler:将Stage提交给Worker(集群)运行,每个Executor运行什么在此分配。

DAGScheduler

DAGScheduler把一个Spark作业转换成Stage的DAG(Directed Acyclic Graph有向无环图),根据RDD和Stage之间的关系找出开销最小的调度方法,然后把Stage以TaskSet的形式提交给TaskScheduler。

TaskScheduler

TaskScheduler维护所有TaskSet,当Executor向Driver发送心跳时,TaskScheduler会根据其资源剩余情况分配相应的Task。另外TaskScheduler还维护着所有Task的运行状态,重试失败的Task。

YARN-cluster的工作流程

Spark任务调度_第1张图片
YarnCluster.jpg

1、Spark Yarn Client向YARN中提交应用程序,包括ApplicationMaster程序、启动ApplicationMaster的命令、需要在Executor中运行的程序等;
2、ResourceManager收到请求后,在集群中选择一个NodeManager,为该应用程序分配第一个Container,要求它在这个Container中启动应用程序的ApplicationMaster,其中ApplicationMaster进行SparkContext等的初始化
3、ApplicationMaster向ResourceManager注册,这样用户可以直接通过ResourceManage查看应用程序的运行状态,然后它将采用轮询的方式通过RPC协议为各个任务申请资源,并监控它们的运行状态直到运行结束;
4、一旦ApplicationMaster申请到资源(也就是Container)后,便与对应的NodeManager通信,要求它在获得的Container中启动启动CoarseGrainedExecutorBackend,CoarseGrainedExecutorBackend启动后会向ApplicationMaster中的SparkContext注册并申请Task。这一点和Standalone模式一样,只不过SparkContext在Spark Application中初始化时,使用CoarseGrainedSchedulerBackend配合YarnClusterScheduler进行任务的调度,其中YarnClusterScheduler只是对TaskSchedulerImpl的一个简单包装,增加了对Executor的等待逻辑等;
5、ApplicationMaster中的SparkContext分配Task给CoarseGrainedExecutorBackend执行,CoarseGrainedExecutorBackend运行Task并向ApplicationMaster汇报运行的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务;
6、应用程序运行完成后,ApplicationMaster向ResourceManager申请注销并关闭自己。
(这边是参考别人博客,4、5并不是很懂有待了解)

参考:
http://blog.csdn.net/yirenboy/article/details/47441465

你可能感兴趣的:(Spark任务调度)