Spark, 大数据

spark-04 运行架构

Spark运行架构

运行架构

  • Driver表示master负责管理整个集群中作业任务调度
  • 图形中的Executor则是slave,负责实际执行任务

Driver

spark驱动器节点,用于执行spark任务中的main方法,负责实际代码的执行工作

  • 将用户程序转换为作业job
  • 在executor之间调度任务task
  • 跟踪executor的执行情况
  • 通过UI展示查询运行情况

所谓的Driver就是驱使整个应用运行起来的程序,也称之为Driver类

Executor

executor是集群中工作节点worker中的一个JVM进程,负责在spark作业中运行具体任务task,任务彼此之间相互独立,spark应用启动时,executor节点被同时启动,并始终伴随整个spark应用的生命周期存在

核心功能:

  • 负责运行组成spark应用的任务,并将结果返回给驱动器进程
  • 通过自身的块管理器(Block Manger)为用户程序中要求缓存的RDD提供内存式存储
    • RDD是直接混存在Executor进程内的,因此任务可以在运行时充分利用缓存数据加速运算

Master 和 Worker

对比yarn类似

  • master -> resourceManager
  • worker -> nodeManager

ApplicationMaster

计算组件Driver executor

资源组件Master Worker

Hadoop用户向Yarn集群提交应用程序时,提交程序中应该包含ApplicationMaster用于向资源调度器申请执行任务的资源容器Container,运行用户自己的程序任务job,监控整个任务的执行,跟踪任务的状态处理任务失败等异常情况

核心概念

Executor和Core

在提交应用中可以提供参数指定计算节点的个数,以及对应的资源

这里的资源一般指的是工作节点Executor的内存大小和使用虚拟CPU核(Core)数量

应用程序相关启动参数如下:

名称说明
--num-executors配置Executor的数量
--executor-memory配置每个Executor的内存大小
--executor-cores配置每个Executor的虚拟CPU的core数量

如果只有一核模拟多核则实际使用的是多线程

并行度

多个任务分布在不同节点同时进行计算实现并行执行,将整个集群并行执行任务的数量称之为并行度

  • 并发

并行

提交流程

Spark应用程序提交到Yarn环境中执行的时候,一般会有两种部署执行的方式:Cluster和Client

两种模式主要区别在于:Driver程序的运行节点位置。

Yarn Client模式

Client模式将用于监控和调度的Driver模块在客户端执行,而不是yarn中,一般用于测试

  • Driver在任务提交的本地机器上运行
  • Driver启动后会和ResourceManager通讯申请启动ApplicationMaster
  • ResourceManager分配Container,在合适的NodeManager上启动ApplicationMaster,AM向ResourceManager申请Executor内存
  • ResourceManager接到ApplicationMaster的资源申请后会分配container,然后ApplicationMaster在资源分配指定的NodeManager上启动Executor进程
  • Executor进程启动后会向Driver反向注册,Executor全部注册完成后,Driver开始执行main函数
  • 之后执行到Action算子时,触发一个Job,并根据宽依赖开始划分stage,每个stage生成对应的TaskSet,之后将task分发到各个Executor上执行

Yarn Cluster模式

Cluster模式将用于监控和调度的Driver模块启动在Yarn集群资源中执行,一般应用于生产环境

  • 在Yarn Cluster模式下,任务提交后会和ResourceManager通讯申请启动ApplicationMaster
  • 随后ResourceManager分配container,在合适的NodeManager上启动ApplicationMaster,此时ApplicationMaster就是Driver
  • Driver启动后向ResourceManager申请Executor内存,ResourceManager接到ApplicationMaster的资源申请后会分配container,然后在合适的NodeManager上启动Executor进程
  • Executor进程启动后会向Driver反向注册,Executor全部注册完成后Driver开始执行main函数
  • 之后执行到Action算子时,触发一个job,并根据宽依赖开始划分stage,每个stage生成对应的TaskSet,之后将task分发到各个Executor上

About 蓝染君

喜爱编程开发的程序猿