文章目录
- 1.1 Spark核心组件
- 1.2 Spark架构
- 1.3 Spark三种环境
- 1.3.1 单机环境
- 1.3.2 伪分布式环境
- 1.3.3 完全分布式环境
- 1.4 Spark核心数据集RDD
- 1.4.1 RDD常用操作
- 1.4.2 RDD的懒操作特性
- 1.4.3 宽依赖与窄依赖
- 1.4.4 Stage的划分
1.1 Spark核心组件
- Spark Core : spark 核心,提供底层框架及核心支持;
- Spark SQL : 可以对多个数据源执行SQL查询;
- Spark Streaming : 流式计算(实时);
- MLBase : 机器学习;
- MLlib : 数据挖掘,属于 MLBase ;
- GraphX : 图计算;
- SparkR : 数学计算,使 R 摆脱单机运行;
1.2 Spark架构
- 客户端程序:用户提交作业。
- Driver : 运行 Application 的 main 函数并创建 SparkContext 。Application 指的是用户编写的 Spark 应用程序。
- SparkContext : 应用上下文,控制整个生命周期。
- Cluster Manager :资源管理器。
- Spark Worker:集群中任何可以运行 Application 的结点。
- Executor:运行在 Worker 的 Task 执行器。
- Task:具体工作任务。
具体流程如图:
1.3 Spark三种环境
1.3.1 单机环境
- 也被称为 Local[N] 模式,N代表线程数;
- 多线程;
- 用于验证应用程序逻辑上是否有问题
1.3.2 伪分布式环境
- 多进程;
- 也用于验证应用程序逻辑上是否有问题
1.3.3 完全分布式环境
- 最常用 Standalone 模式,分为 Driver、Executor、Master、Worker 四种进程;
- Driver:运行 Spark 应用程序;
- Executor:通过启动多个线程(Task)来执行对RDD的 partitions 进行并行计算;
- Master:负责资源调度和分配;
- Worker:用自己的内存存储RDD的某些 Partitions 并执行并行计算
具体流程如图:
1.4 Spark核心数据集RDD
- RDD可以理解为一个提供了许多操作接口的数据集合;
- RDD数据可以分为一至多个 partitions ,存储在不同机器中;
1.4.1 RDD常用操作
- 转换算子(Transformation):将原始数据集转换为RDD,或将一个RDD转换为另一个RDD;
- 行动算子(Action):将RDD存储到硬盘,或触发转换操作的执行;
1.4.2 RDD的懒操作特性
所有转换操作都是懒惰(Lazy)操作,即只做记录,并不执行;
1.4.3 宽依赖与窄依赖
- 宽依赖(一对一):子RDD的每个分区只依赖于父RDD的一个分区;
- 窄依赖(多对一):子RDD的每个分区都依赖于父RDD的多个分区;
1.4.4 Stage的划分
- 一个 Job 会被划分成一定数量的 Stage ,每个 Stage 按顺序执行;
- Spark 有两类 Task,包括 ShuffleMapTask 和 ResultTask;
- ShuffleMapTask 输出的是 Shuffle 所需的数据,ResultTask 输出的是最终的结果;
- 每个 Shuffle 之前都是一个 Stage;
如图:
groupBy() 和 join() 为 Shuffle 操作,得到 Stage1 和 Stage2,join() 操作本身是 Stage3