第1章 Spark SQL背景 1
1.1大数据与Spark系统 1
1.2关系模型与SQL语言 3
1.3Spark SQL发展历程 4
1.4本章小结 5
第2章 Spark基础知识介绍 6
2.1RDD编程模型 6
2.2DataFrame与Dataset 9
2.3本章小结 10
第3章 Spark SQL执行全过程概述 11
3.1从SQL到RDD:一个简单的案例 11
3.2重要概念 14
3.2.1InternalRow体系 14
3.2.2TreeNode体系 15
3.2.3Expression体系 17
3.3内部数据类型系统 20
3.4本章小结 21
第4章 Spark SQL编译器Parser 22
4.1DSL工具之ANTLR简介 22
4.1.1基于ANTLR4的计算器 23
4.1.2访问者模式 25
4.2SparkSqlParser之AstBuilder 28
4.3常见SQL生成的抽象语法树概览 30
4.4本章小结 33
第5章 Spark SQL逻辑计划(LogicalPlan) 34
5.1Spark SQL逻辑计划概述 34
5.2LogicalPlan简介 35
5.2.1QueryPlan概述 35
5.2.2LogicalPlan基本操作与分类 37
5.2.3LeafNode类型的LogicalPlan 38
5.2.4UnaryNode类型的LogicalPlan 39
5.2.5BinaryNode类型的LogicalPlan 40
5.2.6其他类型的LogicalPlan 41
5.3AstBuilder机制:Unresolved LogicalPlan生成 41
5.4Analyzer机制:Analyzed LogicalPlan生成 46
5.4.1Catalog体系分析 46
5.4.2Rule体系 48
5.4.3Analyzed LogicalPlan生成过程 50
5.5Spark SQL优化器Optimizer 56
5.5.1Optimizer概述 56
5.5.2Optimizer规则体系 57
5.5.3Optimized LogicalPlan的生成过程 62
5.6本章小结 64
第6章 Spark SQL物理计划 (PhysicalPlan) 66
6.1Spark SQL物理计划概述 66
6.2SparkPlan简介 67
6.2.1LeafExecNode类型 68
6.2.2UnaryExecNode类型 69
6.2.3BinaryExecNode类型 70
6.2.4其他类型的SparkPlan 70
6.3Metadata与Metrics体系 71
6.4Partitioning与Ordering体系 72
6.4.1Distribution与Partitioning的概念 72
6.4.2SparkPlan的常用分区排序操作 76
6.5SparkPlan生成 77
6.5.1物理计划Strategy体系 79
6.5.2常见Strategy分析 81
6.6执行前的准备 83
6.6.1PlanSubqueries规则 84
6.6.2EnsureRequirements规则 85
6.7本章小结 89
第7章 Spark SQL之Aggregation实现 90
7.1Aggregation执行概述 90
7.1.1文法定义 90
7.1.2聚合语句Unresolved LogicalPlan生成 92
7.1.3从逻辑算子树到物理算子树 93
7.2聚合函数(AggregateFunction) 97
7.2.1聚合缓冲区与聚合模式(AggregateMode) 97
7.2.2DeclarativeAggregate聚合函数 100
7.2.3ImperativeAggregate聚合函数 101
7.2.4Typed ImperativeAggregate聚合函数 101
7.3聚合执行 102
7.3.1执行框架AggregationIterator 103
7.3.2基于排序的聚合算子SortAggregateExec 104
7.3.3基于Hash的聚合算子HashAggregateExec 105
7.4窗口(Window)函数 108
7.4.1窗口函数定义与简介 109
7.4.2窗口函数相关表达式 111
7.4.3窗口函数的逻辑计划阶段与物理计划阶段 113
7.4.4窗口函数的执行 117
7.5多维分析 120
7.5.1OLAP多维分析背景 120
7.5.2Spark SQL多维查询 121
7.5.3多维分析LogicalPlan阶段 123
7.5.4多维分析PhysicalPlan与执行 126
7.6本章小结 128
第8章 Spark SQL之Join实现 129
8.1Join查询概述 129
8.2文法定义与抽象语法树 130
8.3Join查询逻辑计划 133
8.3.1从AST到Unresolved LogicalPlan 133
8.3.2从Unresolve LogicalPlan到Analyzed LogicalPlan 136
8.3.3从Analyzed LogicalPlan到Optimized LogicalPlan 137
8.4Join查询物理计划 140
8.4.1Join物理计划的生成 140
8.4.2Join物理计划的选取 141
8.5Join查询执行 143
8.5.1Join执行基本框架 143
8.5.2BroadcastJoinExec执行机制 144
8.5.3ShuffledHashJoinExec执行机制 145
8.5.4SortMergeJoinExec执行机制 148
8.6本章小结 155
第9章 Tungsten技术实现 156
9.1内存管理与二进制处理 156
9.1.1Spark内存管理基础 156
9.1.2Tungsten内存管理优化基础 174
9.1.3Tungsten内存优化应用 179
9.2缓存敏感计算(Cache-aware computation) 185
9.3动态代码生成(Code generation) 188
9.3.1漫谈代码生成 188
9.3.2Janino编译器实践 190
9.3.3基本(表达式)代码生成 191
9.3.4全阶段代码生成(WholeStageCodegen) 196
9.4本章小结 211
第10章 Spark SQL连接Hive 212
10.1Spark SQL连接Hive概述 212
10.2Hive相关的规则和策略 213
10.2.1HiveSessionCatalog体系 213
10.2.2Analyzer之Hive-Specific分析规则 216
10.2.3SparkPlanner之Hive-Specific转换策略 217
10.2.4Hive相关的任务执行 218
10.3Spark SQL与Hive数据类型 219
10.3.1Hive数据类型与SerDe框架 219
10.3.2DataTypeTolnspector与Data Wrapping 220
10.3.3lnspectorToDataType与Data Unwrapping 221
10.4Hive UDF管理机制 223
10.5Spark Thrift Server实现 225
10.5.1Service体系 227
10.5.2Operation与OperationManager 228
10.5.3Session与SessionManager 232
10.5.4Authentication安全认证管理 234
10.5.5Spark Thrift Server执行流程 235
10.6本章小结 239
第11章 Spark SQL开发与实践 240
11.1腾讯大数据平台(TDW)简介 240
11.2腾讯大数据平台SQL引擎(TDW-SQL-Engine) 241
11.2.1SQL-Engine背景与演化历程 241
11.2.2SQL-Engine整体架构 242
11.3TDW-Spark SQL开发与优化 244
11.3.1业务运行支撑框架 244
11.3.2新功能开发案例 248
11.3.3性能优化开发案例 256
11.4业务实践经验与教训 261
11.4.1Spark SQL集群管理的经验 261
11.4.2Spark SQL业务层面调优 263
11.4.3SQL写法的“陷阱” 268
11.5本章小结 271
总结 272
参考文献 273