这是我参与「第四届青训营 」笔记创作活动的第4天
1. 大数据处理引擎Spark介绍
1.1 什么是Spark?
Apache Spark™ is a multi-language engine for executing data engineering, data science, and machine learning on single-node machines or clusters.
1.2 Spark生态&特点
- 统一引擎,支持多种分布式场景
- 多语言支持
- 可读写丰富数据源
- 丰富灵活的API/算子
- 支持K8S/YARN/Mesos 资源调度
1.3 Spark运行结构 & 部署方式
- Spark Local Mode
- 本地测试/单进程多线程模式
- spark-sql --master local[*]
- Spark Standalone Mode
- 需要启动Spark的Standalone集群的Master/Worker
- spark-sql --master spark://{port}...
- ON YARN/K8S
- 依赖外部资源调度(YARN/K8S)
- spark-sql --master yarn...
- spark-sql --master k8s://https://<k8s-apiserver-host.....
1.4 提交一个简单的任务
- SparkPi scala 代码
- 编译成jar包后,使用spark-submit提交
- result
2. SparkCore原理解析
RDD(Resilient Distributed Dataset):弹性分布式数据集,是一个容错的、并行的数据结构
RDD算子:对任何函数进行某一项操作都可以认为是一个算子,RDD算子是RDD的成员函数
Transform(转换)算子: 根据已有RDD创建新的RDD
Action(动作)算子: 将在数据集上运行计算后的数值返回到驱动程序,从而触发真正的计算
DAG(Directed Acyclic Graph): 有向无环图,Spark中的RDD通过一系列的转换算子操作和行动算子操作形成了一个DAG
DAGScheduler:将作业的DAG划分成不同的Stage,每个Stage都是TaskSet任务集合,并以TaskSet为单位提交给TaskScheduler。
TaskScheduler:通过TaskSetManager管理Task,并通过集群中的资源管理器(Standalone模式下是Master,Yarn模式下是ResourceManager)把Task发给集群中Worker的Executor
Shuffle:Spark中数据重分发的一种机制
3. SparkSQL原理解析
DataFrame: 是一种以RDD为基础的分布式数据集, 被称为SchemaRDD
Catalyst:SparkSQL核心模块,主要是对执行过程中的执行计划进行处理和优化
DataSource:SparkSQL支持通过 DataFrame 接口对各种数据源进行操作。
Adaptive Query Execution:自适应查询执行
Runtime Filter:运行时过滤
Codegen:生成程序代码的技术或系统,可以在运行时环境中独立于生成器系统使用
3.1 SparkSQL执行流程
SparkSql执行过程:
- Unresolved Logical Plan:未解析的逻辑计划,仅仅是数据结构,不包含任何数据信息。
- Logical Plan:解析后的逻辑计划,节点中绑定了各种优化信息。
- Optimized Logical Plan:优化后的逻辑计划
- Physical Plans:物理计划列表
- Selected Physical Plan 从列表中按照一定的策略选取最优的物理计划