【大数据】Spark On Yarn 理解(图文)

发布时间 2023-10-19 17:56:23作者: PythonNew_Mr.Wang

基本架构 

 

1:ResourceManager(资源管理器):ResourceManager是YARN的核心组件,负责管理和分配集群资源。它接收来自Spark应用程序的资源请求,并根据可用资源情况进行分配和调度。

2:NodeManager(节点管理器):NodeManager是每个节点上的代理程序,负责管理该节点上的资源。它向ResourceManager报告节点的可用资源,并根据ResourceManager的指令来启动和停止容器,其中容器是运行Spark应用程序的基本单位。

3:Spark Driver(驱动程序):Spark Driver是Spark应用程序的主要组件,负责解析用户代码、创建任务和执行作业。在Spark On YARN中,每个Spark应用程序都有一个驱动程序,它运行在YARN的容器中。

4:ApplicationMaster(应用程序管理器):ApplicationMaster是Spark应用程序在YARN上的代理程序,负责与ResourceManager进行通信,申请资源、分配任务和监控应用程序的执行。每个Spark应用程序都有一个ApplicationMaster,它运行在YARN的容器中,并协调所有的Spark任务。

5:Spark Executor(执行器):Spark Executor是在集群节点上运行的任务执行进程,负责执行Spark任务的具体计算。每个Spark Executor都与一个YARN容器关联,由ApplicationMaster分配资源并启动。

 

Client模式(客户端模式)与 Cluster模式(集群模式)

 

 原理步骤是相同的:(位置上有所不同)

1:用户在客户端机器上编写Spark应用程序,并通过spark-submit命令将应用程序提交到YARN集群。

2:在客户端机器上运行的spark-submit命令将应用程序打包成一个可执行的Jar包,并将该包和一些配置信息发送到YARN集群的ResourceManager。

3:ResourceManager接收到应用程序的提交请求后,为其分配一个ApplicationMaster。此时,ApplicationMaster的运行环境和资源是由YARN集群提供的。

4:ApplicationMaster启动后,负责解析用户代码,并创建Spark任务。它会向ResourceManager申请资源,并将任务分配给Executor。

5:ResourceManager根据可用资源情况,为ApplicationMaster和Executor分配资源,即启动YARN容器。这些容器会在集群节点上启动,并通过网络与ApplicationMaster进行通信。

6:ApplicationMaster向ResourceManager申请Executor资源,并将任务分配给Executor。它会将应用程序的Jar包和相关依赖文件发送给Executor所在的节点。

7:Executor启动后,负责执行Spark任务的具体计算。它会根据ApplicationMaster的指令,从数据源加载数据,进行数据处理和转换,并将结果写入到存储系统。

8:ApplicationMaster监控任务的执行情况,包括任务的进度、失败和完成等状态。它会向ResourceManager报告任务的状态,并根据需要申请更多的资源。

9:当任务完成时,ApplicationMaster向ResourceManager释放资源,并将任务执行的结果返回给客户端。

10:客户端机器上的spark-submit命令接收到任务完成的通知后,将任务的执行结果和日志文件从YARN集群上下载到本地。