问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Spark集群架构和核心组件介绍

创作时间:
作者:
@小白创作中心

Spark集群架构和核心组件介绍

引用
CSDN
1.
https://blog.csdn.net/weixin_53898747/article/details/130000351

Apache Spark是一个基于内存的快速、通用、可扩展的大数据分析计算引擎,自2009年诞生以来,已经成为分布式计算领域的重要技术框架。本文将详细介绍Spark的集群架构、核心组件以及相关概念,帮助读者全面了解这一强大的数据处理工具。

一.Spark简介

Spark于2009年诞生于加州大学伯克利分校AMPLab,2013年被捐赠给Apache软件基金会,2014年2月成为Apache的顶级项目。相对于MapReduce的批处理计算,Spark可以带来上百倍的性能提升,因此它成为继MapReduce之后,最为广泛使用的分布式计算框架。

Spark是一种基于内存的快速、通用、可扩展的大数据分析计算引擎。

二.Apache Spark特点

  • Spark是一种由Scala语言开发的快速、通用、可扩展的大数据分析引擎
  • 使用先进的DAG调度程序,查询优化器和物理执行引擎,以实现性能上的保证;
  • 多语言支持,目前支持的有Java、Scala、Python和R;
  • 提供了80多个高级API,可以轻松地构建应用程序;
  • 支持批处理、流处理和复杂的业务分析;
  • 丰富的类库支持:包括SQL、MLlib、GraphX和Spark Streaming等库,并且可以将它们无缝地进行组合;
  • 丰富的部署模式:支持本地模式和自带的集群模式,也支持在Hadoop、Mesos、Kubernetes上运行;
  • 多数据源支持:支持访问HDFS、Alluxio、Cassandra、HBase、Hive以及数百个其他数据源中的数据。


Spark架构和支持数据源

三.集群架构


集群架构图

Spark框架的核心是一个计算引擎,整体来说,它采用了标准master-slave的结构。如上图所示,它展示了一个Spark执行时的基本结构。图形中的Driver表示master,负责管理整个集群中的作业任务调度。图形中的Executor则是slave,负责实际执行任务。

3.1术语释义

Term(术语)
Meaning(含义)
Application
Spark应用程序,由集群上的一个Driver节点和多个Executor节点组成。
Driver program
主运用程序,该进程运行应用的main()方法并且创建SparkContext
Cluster manager
集群资源管理器(例如,Standlone Manager,Mesos,YARN)
Worker node
执行计算任务的工作节点
Executor
位于工作节点上的应用进程,负责执行计算任务并且将输出数据保存到内存或者磁盘中
Task
被发送到Executor中的工作单元

3.2集群架构执行过程

  1. 用户程序创建SparkContext后,它会连接到集群资源管理器(Cluster manager),集群资源管理器会为用户程序分配计算资源,并启动Executor;
  2. Driver将计算程序划分为不同的执行阶段和多个Task,之后将Task发送给Executor;
  3. Executor负责执行Task,并将执行状态汇报给Driver,同时也会将当前节点资源的使用情况汇报给集群资源管理器。

3.3集群核心组件

3.3.1Driver

Spark驱动器节点,用于执行Spark任务中的main方法,负责实际代码的执行工作。Driver在Spark作业执行时主要负责:

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

实际上,我们无法准确地描述Driver的定义,因为在整个的编程过程中没有看到任何有关Driver的字眼。所以简单理解,所谓的Driver就是驱使整个应用运行起来的程序,也称之为Driver类,和Hadoop的Namenode定义相近。

3.3.2Executor

Spark Executor是集群中工作节点(Worker)中的一个JVM进程,负责在Spark作业中运行具体任务(Task),任务彼此之间相互独立。Spark应用启动时,Executor节点被同时启动,并且始终伴随着整个Spark应用的生命周期而存在。如果有Executor节点发生了故障或崩溃,Spark应用也可以继续执行,会将出错节点上的任务调度到其他Executor节点上继续运行。和Hadoop的Datanode定义相近。

Executor有两个核心功能:

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

3.3.3Master&Worker

Spark集群的独立部署环境中,不需要依赖其他的资源调度框架,自身就实现了资源调度的功能,所以环境中还有其他两个核心组件:Master和Worker,这里的Master是一个进程,主要负责资源的调度和分配,并进行集群的监控等职责,类似于Yarn环境中的RM,而Worker呢,也是进程,一个Worker运行在集群中的一台服务器上,由Master分配资源对数据进行并行的处理和计算,类似于Yarn环境中NM。

3.3.4ApplicationMaster

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

说的简单点就是,ResourceManager(资源)和Driver(计算)之间的解耦合靠的就是ApplicationMaster。

四.Spark核心组件

Spark基于Spark Core扩展了四个核心组件,分别用于满足不同领域的计算需求。

4.1 Spark Core

Spark Core中提供了Spark最基础与最核心的功能,Spark其他的功能如:Spark SQL,Spark Streaming,GraphX, MLlib都是在Spark Core的基础上进行扩展的

4.2 Spark SQL

Spark SQL是Spark用来操作结构化数据的组件。通过Spark SQL,用户可以使用SQL或者Apache Hive版本的SQL方言(HQL)来查询数据。

特点:

  • 能够将SQL查询与Spark程序无缝混合,允许您使用SQL或DataFrame API对结构化数据进行查询;
  • 支持多种数据源,包括Hive,Avro,Parquet,ORC,JSON和JDBC;
  • 支持HiveQL语法以及用户自定义函数(UDF),允许你访问现有的Hive仓库;
  • 支持标准的JDBC和ODBC连接;
  • 支持优化器,列式存储和代码生成等特性,以提高查询效率。

4.3 Spark Streaming

Spark Streaming是Spark平台上针对实时数据进行流式计算的组件,提供了丰富的处理数据流的API,支持从HDFS,Flume,Kafka,Twitter和ZeroMQ读取数据,并进行处理。


Spark Streaming的本质是微批处理,它将数据流进行极小粒度的拆分,拆分为多个批处理,从而达到接近于流处理的效果。

4.4 Spark MLlib

MLlib是Spark的机器学习库。其设计目标是使得机器学习变得简单且可扩展。它提供了以下工具:

  • 常见的机器学习算法:如分类,回归,聚类和协同过滤;
  • 特征化:特征提取,转换,降维和选择;
  • 管道:用于构建,评估和调整ML管道的工具;
  • 持久性:保存和加载算法,模型,管道数据;
  • 实用工具:线性代数,统计,数据处理等。

4.5Spark GraphX

GraphX是Spark面向图计算提供的框架与算法库,为了支持图计算,GraphX提供了一组基本运算符(如:subgraph,joinVertices和aggregateMessages)以及优化后的Pregel API。此外,GraphX还包括越来越多的图形算法和构建器,以简化图形分析任务。

五.核心概念

5.1 Executor与Core

Spark Executor是集群中运行在工作节点(Worker)中的一个JVM进程,是整个集群中的专门用于计算的节点。在提交应用中,可以提供参数指定计算节点的个数,以及对应的资源。这里的资源一般指的是工作节点Executor的内存大小和使用的虚拟CPU核(Core)数量。

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

5.2 并行度

在分布式计算框架中一般都是多个任务同时执行,由于任务分布在不同的计算节点进行计算,所以能够真正地实现多任务并行执行,记住,这里是并行,而不是并发。这里我们将整个集群并行执行任务的数量称之为并行度。那么一个作业到底并行度是多少呢?这个取决于框架的默认配置。应用程序也可以在运行过程中动态修改。

5.3 有向无环图(DAG)

Spark应用程序会生成多个作业提交到Spark集群中进行处理。作业并不是应用被拆分的最小计算单元,Spark集群收到作业后会对作业进行切分和规则,进行相应调度。第一步将作业按照RDD转换操作切分为最小处理单元,即任务(Task)。第二步是对任务进行规划,生成包含多个任务的阶段(Stage)。这两步的都是由DAGScheduler实例生成。

Spark进行计算每一个RDD数据单元时是可以被切分为更小的数据块在不同的节点中处理,在不同节点的数据块就是分区(Partition)。在RDD转换过程汇总,就是以分区为最小单元进行处理的。

5.4 提交过程

所谓的提交流程,其实就是根据需求写的应用程序通过Spark客户端提交给Spark运行环境执行计算的流程。yarn环境使用比较多,所以着重写一下yarn。

Spark应用程序提交到Yarn环境中执行的时候,一般会有两种部署执行的方式:Client和Cluster。两种模式主要区别在于:Driver程序的运行节点位置。

5.5 Yarn Client模式

  1. Client模式将用于监控和调度的Driver模块在客户端执行,而不是Yarn中,所以一般用于测试
  2. Driver在任务提交的本地机器上运行。
  3. Dirver启动后会和ResourceManager通讯申请启动ApplicationMaster。
  4. ResourceManager分配container,在合适的NodeManager上启动ApplicationMaster,负责向ResourceManager申请过Executor内存。
  5. ResouceManager接到ApplicationMaster的资源申请后会分配container,然后ApplicationMaster在资源分配指定的NodeManager上启动Executor进程
  6. Executor进程启动后会向Driver反向注册,Executor全部注册完成后Dirver开始执行main函数。
  7. 之后执行到Action算子时,触发一个Job,并根据宽依赖开始划分stage,每个stage生成对应的TaskSet,之后将task分发到各个Executor上执行。

5.6 Yarn Cluster模式

  1. Cluster模式将用于监控和调度的Driver模块启动在Yarn集群资源中执行。一般应用于实际生产环境。
  2. 在Yarn Cluster模式下,任务提交后会和ResouceManager通讯申请启动ApplicationMaster。
  3. 随后ResouceManager分配container,在合适的NodeManager上启动ApplicationMaster,此时的ApplicationMaster就是Driver。
  4. Driver启动后向ResouceManager申请Executor内存,ResouceManager接到ApplicationMaster的资源申请后会分配container,然后在合适的NodeManager上启动Executor进程。
  5. Executor进程启动后会向Driver反向注册,Executor全部注册完成后Driver开始执行main函数。
  6. 之后执行到Action算子时,触发一个Job,并根据宽依赖开始划分stage,每个stage生成对应的TaskSet,之后将task分发到各个Executor上执行。
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号