Spark基础

Spark的架构

image-20240302174420683

Spark的架构按上面的设计,分为四层:

  • 存储层。Spark本身其实只是一个计算引擎,并不存储数据,但它需要跟各种数据源作交互
  • 调度层。一般在生产环境使用YARN或k8s来作调度,学习的时候用Local或Standalone模式
  • Spark Core。Spark的基础组件,提供了分布式任务调度、内存管理、错误恢复、和存储系统的交互等功能,可以将Spark Core理解为Spark的核心引擎
  • 最上面是应用层。包括Spark SQL,它是Spark的结构化数据处理组件,支持SQL查询和与外部数据源的集成;Spark Streaming,Spark的流处理组件,支持以近实时的方式处理流式数据

spark中的角色

image-20220602224248363

Master Node: 常驻Master守护进程,负责管理全部的Worker节点。

Worker Node:常驻Worker守护进程,负责与Master节点通信并管理executors。在Spark on Yarn模式下就是NodeManager节点

Application: Application是指用户编写的Spark应用程序,其中包括一个Driver功能的代码和分布在集群中多个节点上运行的Executor代码。

Spark的运行架构

Spark运行架构由三个主要组件组成:DriverCluster ManagerExecutor

image-20240302201827778

Driver

  • 是spark应用程序的入口点,它负责解析用户的应用程序代码,并将任务Task划分成一系列的stage,以及在集群上为任务安排调度。Driver节点负责管理各个任务之间的依赖关系,并将它们转换成一个可执行的物理执行计划(DAG)

  • Spark中的Driver运行上述Application的main函数并创建SparkContext,创建SparkContext的目的是为了准备Spark应用程序的运行环境。在Spark中由SparkContext负责与ClusterManager通信,进行资源申请、任务的分配和监控等,当Executor部分运行完毕后,Driver同时负责将SparkContext关闭,通常用SparkContext代表Driver。

  • Driver可以跑在Master Node也可以跑在Worker Node,上图中仅展示跑在了Master Node

Cluster Manager

负责在集群中为应用程序分配资源。常见有三种类型:

  • Standalone: Spark原生的资源管理,由Master负责资源的分配

  • Apache Mesos: 与hadoop MR兼容性良好的一种资源调度框架

  • Hadoop Yarn: 主要是指Yarn中的Resource Manager

Executor

  • Executor都运行在自己的JVM进程中,并且为Spark应用程序分配了一定数量的内存和CPU资源。Executor在运行过程中负责接收和执行任务。

  • 如果Executor节点发生了故障或崩溃,Spark应用也可以继续执行,会将出错节点上的任务调度到其他的Executor节点上继续运行。

Executor有两个核心功能:

  • 负责运行组成Spark应用的任务,并将结果返回给驱动器Driver进程。

  • 它们通过自身的块管理(Block Manager)为用户程序中要求缓存的数据提供内存式存储。数据是直接缓存在Executor进程内的,因此任务可以在运行时充分利用缓存数据加速运算。


Spark的概念有很多,但只要形成体系,学习起来并不复杂

image-20240302174935122