目录

一.Spark简介:

二.Apache Spark特点:

三.集群架构:

3.1术语释义:

3.2集群架构执行过程:

3.3集群核心组件:

3.3.1Driver:

3.3.2Executor:

3.3.3Master&Worker:

3.3.4ApplicationMaster:

四.Spark核心组件:

4.1 Spark Core

4.2 Spark SQL

4.3 Spark Streaming

4.4Spark MLlib

4.5Spark GraphX

五.核心概念:

5.1 Executor与Core

5.2 并行度:

5.3 有向无环图(DAG)

5.4 提交过程

5.5 Yarn Client 模式

5.6 Yarn Cluster模式


一.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(含义)
ApplicationSpark 应用程序,由集群上的一个 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.4Spark 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上执行。