作业调度简介
设计者将资源进行不同粒度的抽象建模,然后将资源统一放入调度器,通过一定的算法进行调度,最终要达到高吞吐或者低访问延时的目的。
Spark在各种运行模式中各个角色实现的功能基本一致,只不过是在特定的资源管理器下使用略微不同的名称和调度机制。
Application调度
一个Application中包含多个Job,每个Job包含多个Stage,每个Stage包含多个Task,那么Application之间如何调度?多个Job之间如何调度?多个Stage之间如何调度?Task之间延时调度机制?
Standalone:FIFO模式
Job调度
就是在Application内部的一组Job集合,在Application分配到的资源量下,通过一定的算法,对每个按一定次序分配Application中资源的过程。
Job的调度模式:
FIFO模式
默认情况下,Spark的调度以FIFO的方式调度Job的执行。给个Job被切分为多个Stage。Job1优先分配需要的资源,之后提交的Job2再分配资源,依次类推。如果第一个Job没有占用满所有的资源,则第二个Job还可以继续获取剩余资源,这样多个Job可以并行运行。
FAIR模式
在FAIR共享模式调试下,Spark在多个Job之间以轮询round robin方式给任务进行资源分配,所有的任务拥有大致相当的优先级来共享集群的资源。这就意味着当一个长任务正在执行时,短任务仍可以被分配到资源,提交并执行,并且获得不错的响应时间。这样就不用像以前一样需要等待长任务执行完才可以。这种调度模式适合多用户的场景。
Tasks延时调度
数据本地性:在分布式系统下,尽量避免数据在网络上传输。一个任务的执行,需要既有任务的jar包,同时还要有数据块。所有传输任务jar包即可。
Tasks延时调度机制: