Spark运行架构
1. 运行架构
Spark采用标准的masterslave结构:
Driver:作为master,负责执行Spark任务的main方法,管理作业调度、任务分配、Executor跟踪及UI展示。
Executor:作为slave,是Worker节点中的JVM进程,负责运行具体任务(Task),并将结果返回给Driver。Executor通过块管理器(Block Manager)缓存RDD数据,加速计算。
2. 核心组件
Master & Worker:在独立部署环境中,Master负责资源调度和集群监控(类似YARN的RM),Worker负责数据处理(类似YARN的NM)。
ApplicationMaster:在YARN环境中,解耦ResourceManager(资源)和Driver(计算),负责申请资源、监控任务状态及处理异常。
3. 核心概念
Executor与Core:Executor是计算节点,可通过参数指定其内存和CPU核数。
并行度(Parallelism):集群并行执行任务的数量,可动态调整。
有向无环图(DAG):Spark程序的拓扑结构,将计算逻辑映射为图形化依赖关系,支持Job内部的DAG划分和实时计算。
4. 提交流程(YARN模式)
Client模式:Driver在本地运行,适用于测试。
Cluster模式:Driver在YARN集群中运行,适用于生产环境。
流程包括:申请资源、启动ApplicationMaster、分配Executor、任务划分(Job→Stage→Task)及任务分发。
第四节 RDD相关概念
1. RDD定义
RDD(弹性分布式数据集)是Spark的基本数据处理模型,特性包括:
弹性:自动容错、计算重试、存储切换、动态分片。
分布式:数据跨节点存储。
不可变:通过生成新RDD实现数据转换。
可分区:支持并行计算。
2. 核心属性
分区列表、分区计算函数、RDD依赖关系、分区器(可选)、首选位置(可选)。
3. 执行原理
Spark先申请资源,将逻辑分解为任务并分发到Executor执行。RDD封装计算逻辑,生成Task传递给Executor。
4. RDD序列化
闭包检测:确保算子外数据可序列化。
Kryo序列化:高效序列化框架,速度是Java序列化的10倍。
5. 依赖关系
窄依赖:父RDD的每个分区最多被子RDD的一个分区依赖(独生子女)。
宽依赖:父RDD的分区被多个子RDD依赖,引发Shuffle(多生)。
阶段划分:DAG根据宽依赖划分Stage,任务分为Application→Job→Stage→Task。
6. 持久化
Cache/Persist:缓存数据到内存或磁盘,血缘关系保留。
Checkpoint:将数据写入HDFS等可靠存储,切断血缘关系,适合长依赖链场景。
7. 分区器
Hash分区:按key的哈希值分配分区(默认)。
Range分区:按key范围均匀分配,保证有序性。
8. 文件读写
支持多种格式(text、sequence、object文件)和系统(本地、HDFS、HBase等)。 3