这是我参与「第四届青训营 」笔记创作活动的第8天
课堂笔记
一、本堂课重点内容:
- spark整体介绍
- sparkCore原理解析
- sparkSQL原理解析
- 工业界实践与挑战
二、详细知识点介绍:
1.spark特点介绍
- 多语言支持包括:SQL、java、scala、python、R
- 支持数据源丰富:Text、Parquet、ORC、JSON等
- 具有丰富的算子API:RDD,DataFrame、DataSet、DataStream
2.spark运行架构
- Sprak Local Mode:主要用于本地测试
- Spark Standalone Mode:资源调度与计算都用spark自身,主要是架构简单
- on Yarn/k8s:此种模式将资源调度交给资源调度组件Yar/k8s,spark毕竟是计算框架,让其专注计算能够提升系统性能,真实生产环境都是这种模式
3.RDD依赖
RDD依赖用于描述父子RDD间的依赖关系,包括宽依赖和窄依赖。
- 窄依赖:父RDD的每个分区(partition)至多对应一个子RDD分区;窄依赖包括NarrowDependency、OneToOneDependency、RangeDependency、PruneDependency
- 宽依赖:父RDD的每个分区(partition)对应两个及以上个子RDD分区;主要是ShuffleDependency
4.Job执行流程:
RDD行动算子触发job,接着根据宽窄依赖划分stage,接着为每个stage生成相应的TaskSet并提交到TaskScheduler进行调度。
5.Spark内存模型
整体上分为堆外内存和堆内内存,主要关注堆内内存,堆内内存采用UnifiedMemoryManager模型来管理,其内存结构划分如下:
- Execution Memory:主要用于shuffle计算等
- Storage Memory:主要用于分区数据缓存和广播变量
- User Memory:主要用于管理用户子定义数据结构以及spark自身元数据
6.Spark Shuffle
每个MapTask生成一个dataFile用于存储shuffle数据,生成一个index文件用于存储索引数据,dataFile中的数据按照partition进行排序。index文件保存PartitionId在dataFile中的位置信息
7.SparkSQL优化
主要包括Catalyst,Adaptive Query Execution,Rutime Filter,Codegen
- Catalyst优化器优化规则包括RBO(Rule-based Optimizer),CBO(Cost-based Optimizer). *Runtime Filter减少大表扫描,shuffle数据量以及参加Join的数据量,因此对整个集群IO/网络/CPu有较大节省
三、课后个人总结: 通过此次课程的学习,对spark有了初步理解,并通过SparkSQL优化器规则又重新复习了SQL查询优化器的内容。