Spark的调度 :
Spark有多种运行模式,例如:Local/Standalone/YARN/Mesos
Application调度 :
Application调度就是组由用户提交到Spark中的作业的集合,通过一定的算法,对每个按一定次序分配集群中资源的过程。
例如: FIFO模式,用户先提交的作业1优先分配需要的资源,之后提交的作业2再分配资源,以此类推。
Job调度 :
Job调度就是Application内部的一组Job组合,在Application分配到的资源量下,通过一定的算法,对每个按照一定次序分配到Application中资源的过程。
FIFO模式 : 用户提交的Job1优先分配需要的资源,之后提交的Job2再分配资源,依此类推。
默认情况下,Spark的调度器以FIFO的方式调度Job的执行。每个JOb被切分为多个Stage。第一个Job优先获取所有可用的资源,接下来第二个JOb再进行剩余资源获取。这样依此类推,如果第一个Job并没有占用所有的资源,则第二个Job还可以继续获取剩余资源,这样多个Job可以并行运行。
FAIR模式 :
在FAIR共享模式调度下,Spark在多个Job之间以轮询(round robin) 方式给任务进行资源分配,所有任务拥有大致相当的优先级来共享集群的资源。这就意味着当一个长任务正在执行时,短任务仍可以被分配到资源,提交执行,并且获得不错的响应时间。这样就不用像以前需要等待长任务执行完才可以。这种调度模式适合多用户的场景
Tasks延时调度 :
数据本地行 : 尽量的避免数据在网络上的传输。
Tasks延时调度机制:
拥有数据的节点当前正被其他的task占用,如果预测当前节点结束当前任务的时间要比移动数据的时间还要少,那么调度很等待,直到当前节点可用。否则移动数据到资源充足节点,分配任务执行。
----------------------------或者说-----------------------
DAG Scheduler调度 : 最高层次的调度对象是stage
为每个job绘出DAG,绘出DAG并查找最短路径。(非递归层次遍历)
把每个job分割成不同的阶段stage。并生成了stage的有序执行序列。stage内是taskset
把task交给task scheduler。
waitingstages父stage未执行完的stage。
runningstages正在运行的stage
faildstages执行失败的stage
Task scheduler调度 : 对象是task
为收到的不同taskset创建一个taskset manager,taskset manager实际负责taskset中task的调度。
taskset manager通过taskset与底层物理节点通信。
fifo和fair调度模式。