Spark 原理与实践 | 青训营笔记

82 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第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查询优化器的内容。