这是我参与「第四届青训营」笔记创作活动的的第7天
1、 大数据处理引擎Spark介绍
1.1 大数据处理技术栈
1.2 常见大数据处理链路
1.3 常见的大数据处理引擎
1.4 Spark官网介绍
1.4.1 关键特征
- 多语言支持,统一方式处理流批数据
- 为看板实现执行快速SQL查询分析
- 对PB数据进行分析,支持data-science
- ML:在单机结点训练,在集群上拓展应用
1.4.2 版本变化
1.4.3 生态和特点
1.5 Spark特点
1.5.1 多语言支持
1.5.2 丰富数据源
1.5.3 丰富的API/算子
- 对于任意一个函数的操作都可以理解为算子
1.6 Spark运行架构&部署方式
1.6.1 介绍
- Driver Program 负责作业的调度,是一个JVM进程。运行程序的main函数,创建一个SparkContext上下文,来控制应用的生命周期。Executor是slave从结点执行task的
1.6.2 提交作业的流程
- 创建上下文:用户创建一个SparkContext,提交到Cluster Manager
- 启动Executor:Cluster Manager根据提交的参数,为本次提交分配计算资源,启动Executor
- 划分Stage:Driver将用户程序划分为不同的Stage,每个Stage有完全相同的一组task构成。这些task会作用于一些待处理的数据的不同分区
- 执行task:在阶段划分完成之后和task创建完成之后,Driver会向Executor发送task,同时Executor在接收到task之后会下载task的依赖等准备好运行环境
- 作业结束:Executor实时将task运行状态发送给Driver,Driver根据收到task运行的状态做转态更新,不断的调用task,将task发送到Executor执行,直到所有的task执行正确,或者超过执行次数,作业就结束了
1.6.3 几种部署模式
- 其中Spark Standalone是不需要借助外部资源调度的集群部署模式,启动自己的Master,Worker
- 使用--master选择不同的部署模式
1.7 Spark下载编译
- 第一种自己下载源码,编译打包。
- 第二种直接去官网下载包。
1.8 Spakr包概览
- 官方包结构(jar目录是依赖,conf目录是配置)
- 第二个是bin目录下的文件(很多提交命令,都是客户端提交作业的命令)
1.9 Spark提交命令
-
配置环境变量
- 设置SPARK_HOME和PATH环境变量,和JAVA很类似。
-
三种提交作业的方式(交互界面)。在本地自测用。线上的时候还是用spark-submit提交。
- spark-shell
- spark-sql
- pyspark
1.10 提交一个简单的任务(spark-submit)
- 使用蒙特卡罗实验估计π,这里除以n-1是无偏估计
- 先将程序打包为jar包,使用spark submit --master local运行,前面说的本地测试
1.11 Spark UI
1.12 Spark性能 Benchmark
2、 SparkCore 原理解析
2.1 SparkCore
- Yarn集群部署:cluster Manager分为Resource Manger和Node Manger
- 选择一个NodeManger启动Driver,负责task的调度
2.2 RDD介绍
- RDD:Resilient Distributed Dataset(弹性分布式数据集)分布式内存的一个抽象概念提供了一种高度受限的共享内存模型。 RDD是可恢复的记录分区的数据集合
- 解释
- Resilient:具有可恢复的容错特性
- Distributed:每个RDD可分成多个分区(partition),一个RDD的不同分区可以存到集群中不同的节点上
- Dataset:每个分区就是一个数据集片段
2.2.1 如何创建RDD
2.2.2 RDD算子
- RDD的两类运算:一个生成新的RDD;一个标注转换结束。
2.2.3 RDD依赖
- 图中父RDD箭头指向子RDD
- partition是指RDD(矩形框)中的蓝色矩形块
- 注意区分父RDD中partition和子RDD中partition中的关系和RDD之间的关系
- NarrowDependency有三个实现
- 宽依赖会产生shuffle
2.2.4 RDD执行流程-划分Stage
- 从后往前推,划分stage,宽依赖划分一个stage,遇到窄依赖合并划分为一个Stage
- resultTask和shuffleMap task
2.3 调度器
2.4 内存管理
- 堆内和堆外
- Executor内存主要分两类
2.4.1 多任务间内存分配
2.5 Shuffle
2.5.1 SortShuffleManager
2.5.2 External Shuffle Service
- 运行在每台主机上,管理Executor shuffle的数据
3、 SparkSQL 原理解析
- 执行流程:下面那个图,和SQL的执行流程类似
- 其中Catalyst的核心负责逻辑优化过程。
3.1 Catalyst优化器
- RBO
- CBO
3.2 自适应查询(AQE)
-
Adaptive Query Execution
-
三种优化场景
- Coalescing shuflle Partitions (partition 合并)
- Switching Join Strategies
- Optimizing Skew Joins
3.3 Runtime Filter
3.4 Bloom Runtime Filter
- 布隆过滤器
3.5 Codegen-Expression
4、 业界挑战与实践
4.1 Shuffle 稳定性问题
- 解决方案: