这是我参与「第四届青训营」笔记创作活动的第七天。
架构
- Spark Core 基本功能如任务调度、错误恢复、内存管理和与存储系统交互等 ,RDD的API定义
- Spark SQL 用于操作结构化数据,支持多种数据源
- Spark Stream 进行流式计算
- MLib 提供常见机器学习功能的程序库,常见的机器学习算法
- GraphX 图计算、图算法等
- 集群管理器
Spark应用
- driver program,负责代码的实际运行,将用户代码转化为job,在executor间进行任务调度
- SparkContext代表和计算集群的一个连接,可以通过它创建RDD
- master,资源调度、集群监视
- worker用master分配的数据进行并行处理和计算
- executor,worker node上的一个进程,执行计算任务并返回结果
Spark程序主要内容:
- 创建输入RDD
- 使用filter等transform操作产生新的RDD
- 对需要重复使用的RDD使用persist()进行持久化
- 使用count()等action操作触发并行计算
RDD
Spark中的RDD(resilient distributed dataset,弹性分布式数据集)就是一个不可变的分布式对象集合。
RDD被划分为多个分区(partition),可以运行在不同的节点上
RDD的创建
- 读取外部数据集
- 在Driver Program中对集合并行化,使用parallelize()方法
RDD算子
两类
- transform如map、filter,返回新的RDD
- action如first、count触发job提交
RDD依赖
窄依赖
父RDD的每个partition至多对应一个子RDD分区。
NarrowDependency
OneToOneDependency
RangeDependency
PruneDependency
宽依赖
父RDD的每个partition可能对应多个子RDD分区。
ShuffleDependency
Spark通过谱系图(lineage graph)记录RDD间的依赖关系,也可用于数据恢复
graph LR
用户程序 --> 物理执行单元task-->逻辑计划DAG-->物理执行计划
逻辑计划-->一系列stage