經過多年的發展,大數據處理技術逐步成熟。作為業界大數據計算的事實標準,Apache Spark系統已經廣泛應用于各大企業與研究機構,并形成完整的生態系統。Spark系統包含了SQL、GraphX和R等各個子系統以支持不同業務領域的需求。作為傳統關系數據庫/數據倉庫在大數據場景下的解決方案,Spark SQL已經成為了業界的重要選擇方案,同時也成為了Spark開源社區中最為活躍的部分。本書聚焦于Spark SQL系統,對其整體架構、內部各個模塊的技術實現機制進行源碼級別的剖析,涉及到SQL編譯、邏輯計劃、物理執行計劃、重要查詢(如Aggregation與Join等)的技術細節。此外,本書內容上還會結合生產環境的海量應用,分享大量真實開發案例與實踐優化經驗。
黃明,騰訊云機器學習平臺負責人,T4 專家。目前負責騰訊 DI-X 機器學習平臺建設以及高緯度機器學習框架 Angel 的開發,助力騰訊內部各種數據和機器學習業務快速發展。黃明在分布式計算和機器學習領域,有豐富的研究和開發經驗,也是 Spark 早期的研究者和布道者之一。朱鋒,博士畢業于中科院軟件所,研究方向為分布式計算與軟件工程。長期關注數據分析、數據庫技術和大數據相關系統,并積極參與開源社區貢獻。2017年加入騰訊,負責Spark SQL相關平臺的開發、優化和維護工作,在SQL-on-Hadoop方面積累了豐富的經驗。張韶全,香港中文大學博士,博士期間的研究方向為系統最優分布式算法。曾任香港應用研究院研究員、聯想香港研發中心高級研究員。現任騰訊大數據平臺高級研發工程師,負責騰訊大數據SQL平臺的建設與研發,平臺規模達到上萬臺服務器,百萬級別業務量,PB級日數據計算量,支撐著騰訊全公司的數據分析業務。擁有多年互聯網公司一線大數據平臺設計與研發經驗,旨在傳播大數據技術和實踐經驗,使其在不同行業落地生根。
第 1 章 Spark SQL 背景
1.1 大數據與 Spark 系統
1.2 關系模型與 SQL 語言
1.3 Spark SQL 發展歷程
1.4 本章小結
第 2 章 Spark 基礎知識介紹
2.1 RDD 編程模型
2.2 DataFrame 與 Dataset
2.3 本章小結
第 3 章 Spark SQL 執行全過程概述
3.1 從 SQL 到 RDD:一個簡單的案例
3.2 重要概念
3.2.1 InternalRow 體系
3.2.2 TreeNode 體系
3.2.3 Expression 體系
3.3 內部數據類型系統
3.4 本章小結
第 4 章 Spark SQL 編譯器 Parser
4.1 DSL 工具之 ANTLR 簡介
4.1.1 基于 ANTLR 4 的計算器
4.1.2 訪問者模式
4.2 SparkSqlParser 之 AstBuilder
4.3 常見 SQL 生成的抽象語法樹概覽
4.4 本章小結
第 5 章 Spark SQL 邏輯計劃(LogicalPlan)
5.1 Spark SQL 邏輯計劃概述
5.2 LogicalPlan 簡介
5.2.1 QueryPlan 概述
5.2.2 LogicalPlan 基本操作與分類
5.2.3 LeafNode 類型的 LogicalPlan
5.2.4 UnaryNode 類型的 LogicalPlan
5.2.5 BinaryNode 類型的 LogicalPlan
5.2.6 其他類型的 LogicalPlan
5.3 AstBuilder 機制:Unresolved LogicalPlan 生成
5.4 Analyzer 機制:Analyzed LogicalPlan 生成
5.4.1 Catalog 體系分析
5.4.2 Rule 體系
5.4.3 Analyzed LogicalPlan 生成過程
5.5 Spark SQL 優化器 Optimizer
5.5.1 Optimizer 概述
5.5.2 Optimizer 規則體系
5.5.3 Optimized LogicalPlan 的生成過程
5.6 本章小結
第 6 章 Spark SQL 物理計劃(PhysicalPlan)
6.1 Spark SQL 物理計劃概述
6.2 SparkPlan 簡介
6.2.1 LeafExecNode 類型
6.2.2 UnaryExecNode 類型
6.2.3 BinaryExecNode 類型
6.2.4 其他類型的 SparkPlan
6.3 Metadata 與 Metrics 體系
6.4 Partitioning 與 Ordering 體系
6.4.1 Distribution 與 Partitioning 的概念
6.4.2 SparkPlan 的常用分區排序操作
6.5 SparkPlan 生成
6.5.1 物理計劃 Strategy 體系
6.5.2 常見 Strategy 分析
6.6 執行前的準備
6.6.1 PlanSubqueries 規則
6.6.2 EnsureRequirements 規則
6.7 本章小結
第 7 章 Spark SQL 之 Aggregation 實現
7.1 Aggregation 執行概述
7.1.1 文法定義
7.1.2 聚合語句 Unresolved LogicalPlan 生成
7.1.3 從邏輯算子樹到物理算子樹
7.2 聚合函數(AggregateFunction)
7.2.1 聚合緩沖區與聚合模式(AggregateMode)
7.2.2 DeclarativeAggregate 聚合函數
7.2.3 ImperativeAggregate 聚合函數
7.2.4 TypedImperativeAggregate 聚合函數
7.3 聚合執行
7.3.1 執行框架 AggregationIterator
7.3.2 基于排序的聚合算子 SortAggregateExec
7.3.3 基于 Hash 的聚合算子 HashAggregateExec
7.4 窗口(Window)函數
7.4.1 窗口函數定義與簡介
7.4.2 窗口函數相關表達式
7.4.3 窗口函數的邏輯計劃階段與物理計劃階段
7.4.4 窗口函數的執行
7.5 多維分析
7.5.1 OLAP 多維分析背景
7.5.2 Spark SQL 多維查詢
7.5.3 多維分析 LogicalPlan 階段
7.5.4 多維分析 PhysicalPlan 與執行
7.6 本章小結
第 8 章 Spark SQL 之 Join 實現
8.1 Join 查詢概述
8.2 文法定義與抽象語法樹
8.3 Join 查詢邏輯計劃
8.3.1 從 AST 到 Unresolved LogicalPlan
8.3.2 從 Unresolve LogicalPlan 到 Analyzed LogicalPlan
8.3.3 從 Analyzed LogicalPlan 到 Optimized LogicalPlan
8.4 Join 查詢物理計劃
8.4.1 Join 物理計劃的生成
8.4.2 Join 物理計劃的選取
8.5 Join 查詢執行
8.5.1 Join 執行基本框架
8.5.2 BroadcastJoinExec 執行機制
8.5.3 ShuffledHashJoinExec 執行機制
8.5.4 SortMergeJoinExec 執行機制
8.6 本章小結
第 9 章 Tungsten 技術實現
9.1 內存管理與二進制處理
9.1.1 Spark 內存管理基礎
9.1.2 Tungsten 內存管理優化基礎
9.1.3 Tungsten 內存優化應用
9.2 緩存敏感計算(Cache-aware computation)
9.3 動態代碼生成(Code generation)
9.3.1 漫談代碼生成
9.3.2 Janino 編譯器實踐
9.3.3 基本(表達式)代碼生成
9.3.4 全階段代碼生成(WholeStageCodegen)
9.4 本章小結
第 10 章 Spark SQL 連接 Hive
10.1 Spark SQL 連接 Hive 概述
10.2 Hive 相關的規則和策略
10.2.1 HiveSessionCatalog 體系
10.2.2 Analyzer 之 Hive-Specific 分析規則
10.2.3 SparkPlanner 之 Hive-Specific 轉換策略
10.2.4 Hive 相關的任務執行
10.3 Spark SQL 與 Hive 數據類型
10.3.1 Hive 數據類型與 SerDe 框架
10.3.2 DataTypeToInspector 與 Data Wrapping
10.3.3 InspectorToDataType 與 Data Unwrapping
10.4 Hive UDF 管理機制
10.5 Spark Thrift Server 實現
10.5.1 Service 體系
10.5.2 Operation 與 OperationManager
10.5.3 Session 與 SessionManager
10.5.4 Authentication 安全認證管理
10.5.5 Spark Thrift Server 執行流程
10.6 本章小結
第 11 章 Spark SQL 開發與實踐
11.1 騰訊大數據平臺(TDW)簡介
11.2 騰訊大數據平臺 SQL 引擎(TDW-SQL-Engine)
11.2.1 SQL-Engine 背景與演化歷程
11.2.2 SQL-Engine 整體架構
11.3 TDW-Spark SQL 開發與優化
11.3.1 業務運行支撐框架
11.3.2 新功能開發案例
11.3.3 性能優化開發案例
11.4 業務實踐經驗與教訓
11.4.1 Spark SQL 集群管理的經驗
11.4.2 Spark SQL 業務層面調優
11.4.3 SQL 寫法的“陷阱”
11.5 本章小結
總結
參考文獻