【工作】Spark 3.0 源码目录结构
工作用的最多的框架了。3.0 release 在即,先开个坑。
3.0 增加了很多新特性,包括
动态分区裁剪(Dynamic Partition Pruning)、
自适应查询执行(Adaptive Query Execution)、
加速器支持(Accelerator-aware Scheduling)、
支持 Catalog 的数据源API(Data Source API with Catalog Supports)、
SparkR 中的向量化(Vectorization in SparkR)、
支持 Hadoop 3/JDK 11/Scala 2.12 等等。
准备花一个星期梳理代码框架,随后挑一些关注的重点内容分析源码。
主要是spark core + sql 相关。
spark源码目录还算分明,毕竟那么多顶级程序员写了10年的工业级开源框架。
包的层次结构最多3层,不会嵌套很深。
按个人理解的重要程度,分为:
★ 辅助类,不重要 ,帮助框架能跑,如配置相关。
★ ★ 串连与实现,整个代码的血肉,组成最多的部分,如RPC收发,Block管理。
★ ★ ★ 核心概念与框架的定义,计算的源头与驱动,如RDD定义与TaskSet/Job调度。
一、spark-core 代码全景
二、spark-sql 代码全景
sql是社区最热门与投入最大的版块,当然理解难度也最大。
尤其是catalyst涉及大量数据库概念与优化思路。
spark一直在做的事就是把数据表示统一,从RDD => DataFrame => DataSet,
然后在统一的结构化数据层面做框架上的优化,(毕竟SQL是最广泛与简便的分析模式)
包括数据结构、内存、序列化、CPU/现代编译器耦合、代码生成等各种措施。
与这些比起来,上面的core模块似乎简单得是个弟弟。。。
sql下又有4个包,其中hive/hive-thriftserver没啥好记的,
只是一些兼容支持,元数据相关,与jdbc服务的实现层。
主要看catalyst与sql-core。