> 文章列表 > 大数据之Spark运行流程

大数据之Spark运行流程

大数据之Spark运行流程

文章目录

  • 前言
  • (一)Spark On Yarn集群的Client模式运行流程
  • (二) Spark On Yarn集群的Cluster模式运行流程
  • 总结

前言

#博学谷IT学习技术支持#
上篇文章有讨论到Spark On Yarn的两种部署模式,如果有不清楚的地方,可以再看看,附上对应文章的链接:Spark的部署模式,本篇文章主要讨论Spark On Yarn两种部署模式的运行流程。

(一)Spark On Yarn集群的Client模式运行流程

大数据之Spark运行流程
该模式的Driver程序在本地Client端运行;

  1. 大致流程:先在提交任务的节点上启动Driver程序,然后向Yarn集群申请运行资源,申请到运行资源后开始执行任务;
  2. 详细流程如下:
    (1)在提交任务的节点上启动Driver程序,执行Main函数,创建SparkContext对象
    (2)Driver程序启动成功后,向ResourceManager申请启动ApplicationMaster
    (3)ResourceManager接收到请求后,在适当的一台NodeManager节点启动ApplicationMaster
    (4)ApplicationMaster启动成功后与Driver程序上的SparkContext对象通信,并根据SparkContext提供的任务信息向ResourceManager申请任务执行所需的资源,以执行Executor
    (5)ResourceManager接收到资源请求后,根据资源调度机制以Container的形式返回给ApplicationMaster
    (6)ApplicationMaster拿着从ResourceManager节点分配到的Container资源信息,向NodeManger节点申请对应的资源,以启动运行Executor
    (7)Executor启动成功后,反向通知Driver,当所有的Executor都启动成功后,Driver开始执行代码部分的逻辑
    (8)Driver先加载代码中与RDD相关的所有算子,并根据算子的依赖关系形成DAG有向无环图,然后划分Stage并进行任务分配,通知Executor执行相关任务
    (9)Executor接收并执行完任务后,将运行结果反馈给Driver
    (10)当Driver接收到所有Executor的执行完成信号后,认为任务已经执行完成,与此同时ResourceManager也会接收到ApplicationMaster返回的任务完成情况,ResourceManager开始回收资源,关闭ApplicationMaster,并通知Driver程序
    (11)Driver还会执行后续与算子无关的代码,代码执行完成后,整个流程就完成了

(二) Spark On Yarn集群的Cluster模式运行流程

大数据之Spark运行流程
该模式下,Driver程序就是Yarn集群的ApplicationMaster,二者合一,Driver程序的任务都由ApplicationMaster来完成;

  1. 大致流程:Client客户端发起任务请求,Yarn集群接收到请求后启动ApplicationMaster,ApplicationMaster启动后进行资源申请,申请到资源后开始执行任务
  2. 详细流程:
    (1)Client客户端发起任务执行请求
    (2)ResourceManager节点接收到任务请求后,请求一台NodeManager节点启动ApplicationMaster
    (3)ApplicationMaster启动后,先初始化SparkContext对象,并根据SparkContext提供的任务信息向ResourceManager节点申请资源
    (4)ResourceManager节点接收到资源请求后,根据资源调度机制以Container的形式返回给ApplicationMaster
    (5)ApplicationMaster拿着ResourceManager分配的Container资源信息,向NodeManager节点申请对应的资源,以启动运行Executor
    (6)Executor启动成功后,反向通知ApplicationMaster,当所有的Executor都启动成功后,ApplicationMaster开始处理代码部分逻辑
    (7)ApplicationMaster先加载所有与RDD相关的算子,并根据算子的依赖关系形成DAG有向无环图,然后划分Stage并进行任务分配,通知Executor执行相关任务
    (8)Executor接收并执行完任务后,将运行结果反馈给ApplicationMaster
    (9)当ApplicationMaster接收到所有Executor的完成信号后,认为任务已经执行完成,与此同时也会将任务完成情况反馈给ResourceManager,ResourceManager开始回收资源,关闭ApplicationMaster
    (11)ApplicationMaster还会执行后续与算子无关的代码,代码执行完成后,整个流程就完成了

总结

以上两种模式的运行流程的区别在于Driver程序在哪里运行,Spark On Yarn的Client模式中,Driver程序在请求的机器节点上运行,而Cluster模式下,Driver程序在集群中运行,此时Driver就是Yarn集群中ApplicationMaster,Driver的任务都由ApplicationMaster来完成。