Spark任务通过application id在Spark UI查看任务执行状态,任务大多数以on yarn的形式提交到Spark集群。
1、定义:yarn是一种hadoop资源调度管理器,通用资源管理系统。为上层应用提供统一的资源调度和管理,在集群资源利用率、资源统一管理和数据共享上带来了巨大好处。
2、基本设计思想:将Hadoop的JobTracker和TaskTracker分离,即资源管理和作业调度/监控分为两个组件,全局的ResourceManager与每个应用相关ApplicationMaster。
3、组成部分:1)一个全局的资源调度管理器ResourceManager 2)ResourceManager的每个代理节点NodeManager 3)每个应用的ApplicationMaster 4)每个ApplicationMaster拥有多个Container在NodeManager上运行
4、执行过程:1)用户向Yarn提交应用程序,其中包括用户程序,启动ApplicationMaster命令等。2)ResourceManager为该应用分配第一个Container,并与对应的NodeManager通信,要求它启动应用程序的ApplicationMaster。3)ApplicationMaster向ResourceManager注册后,为各个任务申请资源,并监控他们的状态,直到运行结束。4)ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请和领取资源。5)ApplicationMaster申请到资源后,便于对应的NodeManager通信,并要求它启动任务。6)NodeManager为任务设置好运行环境(环境变量、jar包、二进制程序)后,将任务启动命令写到脚本中,通过运行脚本启动任务。7)各个任务通过RPC协议向ApplicationMaster汇报自己的运行状态和进度,在任务失败时重新启动任务。 8)应用程序运行完成后,ApplicationMaster向ResourceManager注销并关闭自己。
5 Yarn有三种调度器
1)FIFO Scheduler,先进先出队列,资源分配的时候,先给队列中最头上的应用分配资源。缺点:如果有一个应用占用了所有的集群资源,会导致其他应用阻塞。
2)Capacity Scheduler,会有一个专门的队列用来运行小任务,但为小任务专门设置队列就会预占一定的集群资源,会导致其执行落后于FIFO Scheduler。
3)Fair Scheduler,会为所有的job动态调整系统资源。如果一个大job提交时,只有这一个job在运行,此时它获得了所有集群资源。当第二个job提交时,Fair调度器会分配一半资源给这个小任务,这两个任务公平的共享集群资源,缺点,当第二个job提交时到获取到资源有一定延迟,它需要等待第一个任务释放占用的Container,小任务执行完成后也会释放自己占用的资源。最终效果就是Fair调度器得到了高的资源利用率的同时又能保证小任务及时完成。
抢占:当一个job提交的一个繁忙的集群的队列时,job并不会马上执行,而是阻塞到正在运行的job使用系统资源,为了时提交job的时间更有预测性(可以设置等待超时时间),Fair调度器支持抢占。