文章目录
一、背景
yran是hadoop体系中的资源调度管理机制,在上面可以运行多套计算框架比如MapReduce;同样也支持Spark。这不仅使得应用程序部署更加方便,也是用户的在yarn集群中运行的服务和Application的资源管理也完全隔离。更具有价值的是yarm通过队列的方式,同时管理集群中的多个服务。
二、yran-client模式
1.yran-client运行流程图
2.yarn-client的工作流程
- 启动应用程序,在SparkContext创建过程中、会初始化DAGScheduler、YarnScheduler、YarnClientSchedulerBackend等调度器。并且YarnClientSchedulerBackend会在内部启动DriverEndpoint和CLient。然后Client会向Yarn集群的ResourceManager申请启动ApplicationMaster。
- ResourceManager收到请求会在急群众选取一个NodeManager,为这个应用程序分配第一个Container,并在这个Container中启动ApplicationMaster;与yarn-cluster的区别是这个ApplicationMaster不运行SparkContext,只会与SparkContext联系进行资源分配。
- SparkContext启动完成后会与ApplicationMaster建立通信,ApplicationMaster也会获取任务资源配置信息;同时会向ResourceManager注册并申请资源,也就是Container容器。
- ApplicationMaster获取到申请资源后,会与对应的NodeManager通信,要求它在Container中启动CoarseGrainedExecutorBackend,而CoarseGrainedExecutorBackend在启动之后也会向SparkContext注册并申请任务集。
- CoarseGrainedExecutorBackend执行分配的任务,并且会向DriverEndpoint汇报运行状态和进度,以便客户端掌握任务的运行状态。
- 应用程序完成后SparkContext会向ResourceManager注销自己关闭自身。
三、yran-cluster模式
1.yran-cluster运行流程图
2.yran-cluster的工作流程
- 客户端提交应用程序时,收线启动Client向yran提交应用,包括启动ApplicationMaster的命令、提交给ApplicationMaster的程序、需要在Executor中执行的程序…
- ResourceManager收到请求会在急群众选取一个NodeManager,为这个应用程序分配第一个Container,并在这个Container中启动ApplicationMaster;并且初始化SpartContext以及相关的调度器。
- ApplicationMaster会向ResourceManager注册,这样我们就可以通过yran的资源管理界面查看应用的运行状态;然后ApplicationMaster会轮询为哥哥任务申请资源,并监控他们的状态直到他们的生命周期结束。
- ApplicationMaster获取到申请资源后(Container),会与对应的NodeManager通信,要求它在Container中启动CoarseGrainedExecutorBackend,而CoarseGrainedExecutorBackend在启动之后也会向SparkContext注册并申请任务集。
- CoarseGrainedExecutorBackend执行分配的任务,并且会向DriverEndpoint汇报运行状态和进度,以便客户端掌握任务的运行状态。
- 应用程序完成后SparkContext会向ResourceManager注销自己关闭自身。
四、yran-client与yran-cluster对比
理解这两种模式要特别注意ApplicationMaster。在yarn中每个Application实例都有一个ApplicationMaster进程,它们是Application启动的第一个容器负责和ResourceManager打交道申请资源。获取资源后通知NodeManager为其启动。yran-client与yran-cluster的区别就是ApplicationMaster进程的区别。
- yran-client:ApplicationMaster仅仅是向yarn请求Executor,Client会和请求的Container通信来调度他们,Client是不能离开的。
- yran-cluster:Driver运行在ApplicationMaster中,它负责向yarn申请资源,并简单度任务的运行状况,我们提交完任务后Client就可以关闭,任务会继续运行在yarn集群上,因此这总模式不适合交互类的作业。