一、架构设计

Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark 是 UC Berkeley AMP lab(加州大学伯克利分校的AMP实验室)所开源的类 Hadoop MapReduce 的通用并行框架。

二、阅读环境准备

三、集群启动

Spark 采用了分布式架构的 master一slave 模型

Spark 集群组件

四、入口 SparkSession

SparkSession 是 Spark 程序的新入口。在 Spark2.0 之前,使用 Spark 需要先创建 SparkConf 和 SparkContext,Spark 2.0 中引入了 SparkSession,为用户提供了一个统一的切入点来使用 Spark 的各项功能。 SparkConf、SparkContext 和 SQLContext 被封装在 SparkSession 中,使用 Spark 的各项功能只需创建一个 SparkSession。

1
2
3
4
5
6
7
8
object SparkPi {
def main(args: Array[String]): Unit = {
val spark = SparkSession
.builder
.appName("Spark Pi")
.getOrCreate()
...
}

在 Spark 的早期版本,SparkContext 是进入 Spark 的切入点。RDD 的创建和操作得使用 SparkContext 提供的 API; 对于 RDD 之外的其他东西,需要使用其他的 Context。比如流处理使用 StreamingContext; 对于 SQL 得使用 SQLContext; 而对于 Hive 得使用 HiveContext。

五、Libraries 层

Spark SQL 是 Spark 用来处理结构化数据的一个模块,它提供了 2 个编程抽象:DataFrame 和 DataSet, 并且作为分布式 SQL 查询引擎的作用。

Spark Streaming 是构建在 Spark 上的实时计算框架,它扩展了 Spark 处理大规模流式数据的能力。Spark Streaming 可结合批处理和交互查询,适合一些需要对历史数据和实时数据进行结合分析的应用场景。

Spark MLlib 是 Spark 提供的一个机器学习库

六、API 层

DataFrame 是一种以 RDD 为基础的带有 Schema 元信息的分布式数据集,类似于传统数据库的二维表格。DataSet 与 DataFrame 相比,保存了类型信息,是强类型的,提供了编译时类型检查。DataSet 包含了 DataFrame 的功能。
Spark2.0 中两者统一,DateFrame 表示为 Dataset[Row],即 DataSet 的子集。

DataFrame 其实就是 Dateset[Row]

如图: DataFrame 提供了详细的结构信息 Schema 列的名称和类型,类似于传统数据库的二维表格,而 DataSet[People] 不光有 Schema 信息,还有类型信息。

DataSet

DataStream 是 SparkStreaming 的数据模型,基于内存处理连续的数据流,本质上就是 RDD 的序列

七、Core 层

Spark Core 提供了 Spark 最基础与最核心的功能。

SparkContext 是 Spark 的入口,相当于应用程序的 $main$ 函数。目前在一个 JVM 进程中可以创建多个 SparkContext,但是只能有一个 active 级别的。如果需要创建一个新的 SparkContext 实例,必须先调用 $stop$ 方法停掉当前 active 级别的 SparkContext 实例。

在 Spark 中很多地方都涉及网络通信,比如 Spark 各个组件间的消息互通 用户文件与 Jar 包的上传、节点间的 Shuffle 过程、Block 数据的复制与备份等。

Spark 的存储体系在整个 Spark 架构中与大地在生态圈中的作用非常类似。Spark 的存储体系贯穿了集群中的每个实例。从单个节点来看,Spark的存储体系隶属于 SparkEnv。

Spark 调度系统分为资源调度和任务调度两个部分,作业提交之后首先由资源调度系统为作业分配所需的计算资源,并创 Driver 和 Executor 实例;然后由任务调度系统通过解析作业的计算逻辑进一步划分 stage、创建 TaskSet 并根据调度算法将 TaskSet 分发到合适的 Executor 执行器上去运行。

计算引擎负责计算分配到 Executor 任务

正在总结中,等我😭~~~

计算引擎
  1. 组件容错

    • ClusterManager

      正在总结中,等我😭~~~

    • Worker

      正在总结中,等我😭~~~

  2. 任务容错

    正在总结中,等我😭~~~