Spark的运行模式讲解

一、背景

yarn是hadoop体系中的资源调度管理机制,在上面可以运行多套计算框架比如MapReduce;同样也支持Spark。这不仅使得应用程序部署更加方便,也是用户的在yarn集群中运行的服务和Application的资源管理也完全隔离。更具有价值的是yarm通过队列的方式,同时管理集群中的多个服务。

二、yarn-client模式

1.yarn-client运行流程图

在这里插入图片描述

2.yarn-client的工作流程

  1. 启动应用程序,在SparkContext创建过程中、会初始化DAGScheduler、YarnScheduler、YarnClientSchedulerBackend等调度器。并且YarnClientSchedulerBackend会在内部启动DriverEndpoint和CLient。然后Client会向Yarn集群的ResourceManager申请启动ApplicationMaster。
  2. ResourceManager收到请求会在集群中选取一个NodeManager,为这个应用程序分配第一个Container,并在这个Container中启动ApplicationMaster;与yarn-cluster的区别是这个ApplicationMaster不运行SparkContext,只会与SparkContext联系进行资源分配。
  3. SparkContext启动完成后会与ApplicationMaster建立通信,ApplicationMaster也会获取任务资源配置信息;同时会向ResourceManager注册并申请资源,也就是Container容器。
  4. ApplicationMaster获取到申请资源后,会与对应的NodeManager通信,要求它在Container中启动CoarseGrainedExecutorBackend,而CoarseGrainedExecutorBackend在启动之后也会向SparkContext注册并申请任务集。
  5. CoarseGrainedExecutorBackend执行分配的任务,并且会向DriverEndpoint汇报运行状态和进度,以便客户端掌握任务的运行状态。
  6. 应用程序完成后SparkContext会向ResourceManager注销自己关闭自身。

三、yarn-cluster模式

1.yarn-cluster运行流程图

2.yarn-cluster的工作流程

  1. 客户端提交应用程序时,收线启动Client向yarn提交应用,包括启动ApplicationMaster的命令、提交给ApplicationMaster的程序、需要在Executor中执行的程序…
  2. ResourceManager收到请求会在集群中选取一个NodeManager,为这个应用程序分配第一个Container,并在这个Container中启动ApplicationMaster;并且初始化SpartContext以及相关的调度器。
  3. ApplicationMaster会向ResourceManager注册,这样我们就可以通过yarn的资源管理界面查看应用的运行状态;然后ApplicationMaster会轮询为哥哥任务申请资源,并监控他们的状态直到他们的生命周期结束。
  4. ApplicationMaster获取到申请资源后(Container),会与对应的NodeManager通信,要求它在Container中启动CoarseGrainedExecutorBackend,而CoarseGrainedExecutorBackend在启动之后也会向SparkContext注册并申请任务集。
  5. CoarseGrainedExecutorBackend执行分配的任务,并且会向DriverEndpoint汇报运行状态和进度,以便客户端掌握任务的运行状态。
  6. 应用程序完成后SparkContext会向ResourceManager注销自己关闭自身。

四、yarn-client与yarn-cluster对比

理解这两种模式要特别注意ApplicationMaster。在yarn中每个Application实例都有一个ApplicationMaster进程,它们是Application启动的第一个容器负责和ResourceManager打交道申请资源。获取资源后通知NodeManager为其启动。yarn-client与yarn-cluster的区别就是ApplicationMaster进程的区别。

  • yarn-client:ApplicationMaster仅仅是向yarn请求Executor,Client会和请求的Container通信来调度他们,Client是不能离开的。
  • yarn-cluster:Driver运行在ApplicationMaster中,它负责向yarn申请资源,并简单度任务的运行状况,我们提交完任务后Client就可以关闭,任务会继续运行在yarn集群上,因此这总模式不适合交互类的作业。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章