这是我参与「第四届青训营 」笔记创作活动的第4天
Spark 原理与实践 | 青训营笔记
1. Spark数据处理引擎介绍
大数据处理技术栈
常见大数据处理技术链路
常见开源大数据处理引擎
本次主要介绍Spark数据处理引擎
Spark生态特点
Spark生态组件:
-
Spark Core:Spark核心组件
实现Spark的基本功能:即任务调度、内存管理、错误恢复、存储系统交互等。
- Spark SQL:操作结构化数据的核心组件
- Spark Structured Streaming:Spark提供的流式计算框架,支持高吞吐量、可容错处理的实时流式数据处理。
- MLlib:Spark提供的关于机器学习功能的算法程序库,包括分类、回归、聚类、协同过滤等算法
- GraphX:Spark提供的分布式图处理框架,有对图计算,图挖掘算法的API接口以及更丰富的功能。
Spark包概览
Spark提交命令
Spark UI
Spark 性能benchmark
Spark运行架构和工作原理
- Application 应用:Spark上运行的应用。
- Driver Program 驱动器:运行main()方法并创建SparkContext的进程。
- Cluster Manager 集群管理器 :用于在集群上申请资源的外部服务
- Worker Node 工作节点:集群上运行应用程序代码的任意一个节点。
- Executor 执行器 :在集群工作节点上为某个应用启动的工作进程,负责运行计算任务,并为应用程序存储数据。
- Task 任务:执行器的工作单元。
- Job 作业:一个并行计算作业,由一组任务(Task)组成,并由Spark的行动(Action)算子(如:save、collect)触发启动。
- Stage 阶段:每个Job可以划分为更小的Task集合,每组任务被称为Stage。
Spark应用在集群上运行时,包括了多个独立的进程,这些进程之间通过驱动程序(Driver Program)中的SparkContext对象进行协调,SparkContext对象能够与多种集群资源管理器(Cluster Manager)通信,一旦与集群资源管理器连接,Spark会为该应用在各个集群节点上申请执行器(Executor),用于执行计算任务和存储数据。Spark将应用程序代码发送给所申请到的执行器,SparkContext对象将分割出的任务(Task)发送给各个执行器去运行
2. SparkCore
SparkCore
什么是RDD:
创建RDD
RDD算子
RDD依赖
RDD执行过程
Scheduler
内存管理
Spark 作为一个基于内存的分布式计算引擎,Spark采用统一内存管理机制。重点在于动态占用机制。
- 设定基本的存储内存(Storage)和执行内存(Execution)区域
- UnifiedMemoryManager统一管理Storage/Execution内存
- 双方空间都不足时,存储到硬盘;对方空余时,可借用对方空间
-
当Storage空闲,Execution可以借用Storage的内存使用,可以减少spill等操作, Execution内存不能被Storage驱逐。Execution内存的空间被Storage内存占用后,可让对方将占用的部分转存到硬盘,然后"归还"借用的空间。
-
同理当Execution空闲,Storage可以借用Execution内存使用
-
user memory存储用户自定义的数据结构或者spark内部元数据
-
Reserverd memory:预留内存,防止OOM,
3. SparkSQL
DataFrame: 一种以RDD为基础的分布式数据集
Catalyst:SparkSQL核心模块,对执行计划进行处理优化
Adaptive Query Execution:自适应查询执行
Runtime Filter:运行时过滤
Codegen:生成程序代码的技术或系统
4. 业界问题与挑战
shuffle稳定性问题
解决方案
SQL执行性能问题
问题解决方向
参数推荐&作业诊断