描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787121343148
√ 揭秘Spark SQL内部架构、算法设计与实现原理,从源码实现层面掌握数据库SQL处理与Spark分布式计算模型。
√ 作为SQL-on-Hadoop解决方案的佼佼者,Spark SQL志在取代传统数据仓库,在数据库应用场景中其模块一直备受关注。
√ 腾讯T4专家|Spark领军人物黄明领衔,长期从事分布式计算和查询优化方面工作,对Spark SQL有较深入研究及大量工程积累。
√ 分享腾讯日均百万SQL总量和数百PB数据处理的一线生产实践,其中披露TDW经验对大数据平台建设和性能优化有重要借鉴意义。
√ 适合要对原生系统进行定制化改造或新特性添加的开发人员,以及想通过理解系统背后核心知识学习分布式系统和数据库实现等技术的从业者。
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 本章小结
总结
参考文献
互联网技术经过几十年的发展已经渗透到人们生活的方方面面,从云计算、大数据到如今如火如荼的人工智能和区块链,相信无论是圈内人还是圈外人,对这些名词都耳熟能详了。仔细一算,“大数据”这个概念的出现已经有十多年了,背后催生的技术可以说是百花齐放、百家争鸣。
2009 年年初,腾讯从传统的数据仓库转向基于 Hadoop 架构的大数据平台,至今将近 10 年, 历经了 3 代跨越式的发展:2009—2011 年是以 Hadoop 为基础的离线计算时代,2012—2014 年 是以 Spark 和 Storm 为引擎的实时计算时代,2015 年至今是以腾讯自研的高性能机器学习平台 Angel 为核心的智能学习时代。从简单的统计报表的计算,到万亿特征维度的算法训练,从结构化数据到图片、语音、文本等非结构化数据,腾讯一直用前沿技术来挖掘大数据背后的价值。
如今,腾讯大数据集群规模达到几万台服务器,存储数据量有几百 PB,每天有几十 PB 的 计算量,支撑着腾讯包括微信、QQ、游戏、广告、支付、视频、音乐等关键业务,助力腾讯业务发展,服务着十亿级别的用户。正是历经了腾讯数以亿计的海量数据的锤炼,让腾讯大数据 平台得到快速的发展,其技术在业内处于领先水平。
腾讯大数据起源于网络社区,并一直积极参与网络社区的建设。2014年,腾讯大数据平台(TDW)的核心组件进行开源,我们在 Hadoop、Spark、Docker、Ceph、HBase、Kubernetes、 Kafka、Storm、Flink、PostgreSQL 等众多社区项目上积极“反哺”社区。2017 年 6 月,我们在 GitHub 上把腾讯大数据第三代的高性能分布式机器学习平台 Angel 进行了开源,吸引了海内外 众多知名企业用户,并于 2018 年 3 月贡献给 Linux 深度学习基金会(LF Deep Learning)。
除代码层面的开源外,近年来,腾讯也把大数据能力开放给传统企业,我们服务了政务民 生、金融、交通、零售、教育、工业等各行各业的用户,旨在让没有大数据人才的企业也能具 备使用大数据的能力。我们乐于把腾讯积累了十年的大数据技术和运维经验对外分享、对外输出,本书也可以看作是腾讯大数据技术开放的一部分。
本书的内容初是腾讯内部为进行 Spark SQL 开发而整理的技术文档,后剥离出通用的 部分集结成册。从数据的维度来看,无论是单机还是分布式环境,SQL 对用户来说都是非常重 要的。Spark SQL 作为腾讯大数据平台中基础的部分,支撑全公司的数据分析业务。因此,书 中的内容并非是针对 Spark SQL 技术的空谈,而是立足于腾讯大数据平台的大量实践经验。 本书的几位作者正是工作在腾讯大数据一线的工程师和技术专家,在日均百万级别的SQL业务处理和优化中积累了丰富的经验。综观全书,条理非常清晰,读者既能在高度上知晓来龙 去脉和他山之石,又能在深度上体会源码级别的技术点剖析。同时,书中结合实践展示了一些 通用案例,避免读者陷入到代码的汪洋大海中。
于我个人而言,大学毕业后在传统的银行工作。后来,在数据爆发的时代,我有幸在国内 数据多的两家公司工作,我在阿里巴巴负责支付宝 BI 数据平台基础架构和应用架构,来到腾 讯后一直负责腾讯的大数据业务。十多年的职业生涯,转换了公司,也转换了工作和生活的城 市,但一直不变的是我的工作始终围绕着“数据”展开,无论是在传统 IT 行业,还是在互联网 行业,“数据”始终是我工作的核心内容,而我自己的职业追求也离不开“数据”。
未来,在人们的生活中,数据将无时无刻无处不在,数据与商业的真正结合将爆发出强大 的生命力和价值。作为服务于上层业务的基础支撑平台,重要的地方在于技术的沉淀和积累, 不断打磨优化。从技术研发人员的角度来讲,重要的是修炼好自己的“内功”,不忘初心。 后,希望每一位读者都能够从本书中有所收获,练好数据的“内功”,与数据结缘。
蒋杰 博士 腾讯首席数据官、腾讯数据平台部总经理
CCF 大数据专家委员会委员
2018 年 7 月
推荐序2
非常高兴收到了师弟朱锋、张博士和明哥关于 Spark SQL 的书稿,也非常荣幸被邀请为本 书作友情序言。本人是朱锋在中科院软件所读博时的师兄,2014 年也曾经在明哥组内实习,目 前在中科院从事大数据方面的科研工作,主要关注 Spark/Flink 等大数据处理系统及大数据分析 算法,之前也在 GitHub 上写过 SparkInternals 等介绍技术原理的文章。
去年就听闻师弟他们在写一本关于 Spark SQL 的书,希望能够将生产环境中平台开发建设 的一些经验总结出来。当时感觉有些惊讶,惊讶师弟从学术界到工业界能够快速转变,短时间 内深入理解了整个系统,并能将经验总结成书。后来想了一下,这也是在情理之中的。朱锋的 博士论文的内容就和 SQL-on-Hadoop 解决方案相关,在 Hadoop、Hive、HBase 等系统上也积累 了多年的开发应用经验,在腾讯接触工业界实际案例后能够迅速应用所学知识,加上读博期间 训练出来的抽象表达能力,与张博士一起,在明哥的全力支持下,足以写出一本有深度的技术 图书。
虽然是熟人,但刚收到书时,我也有着顾虑。相信大多数读者也是如此,就是想知道这本 书是否值得读,讲没讲干货,能否让读者快速理解 Spark SQL 的原理,能否对读者的实际工作 有用。带着这些问题,我开始了阅读,发现越读干货越多,从 Spark SQL 历史到 Spark SQL 语法 解析,从逻辑执行计划和物理执行计划生成,继续往下切入到 Tungsten 内存管理,全面讲述了 Spark SQL 技术的方方面面,不仅有原理介绍,还有实现细节的描述和总结,更有在海量数据和 海量业务下的实践经验的总结。这些对想深入理解 Spark SQL,并对其进行优化改进,以及想更 高效地使用 Spark SQL 的开发者、用户都有莫大的帮助。
抱着学习的态度读完本书,我在以下几个方面受益匪浅:逻辑执行计划、物理执行计划、 优化方法等背后的技术原理,本书均透彻地讲清楚了。在读的过程中,我也在感概,记得前几 年带组里的师弟师妹们想在 Spark SQL 中添加关键词查询功能(类似 MySQL 中的 MATCH 关键 词),发现需要在 Spark SQL 中添加新语法、改进语法解析、对翻译生成执行计划等一系列模块 进行改进,由于当时缺少 Spark SQL 技术体系引导和深入解析的书籍,因此我们花了不少时间 扎入代码,并自行总结技术体系和实现原理。本书的内容对于想对 Spark SQL 进行二次开发的 读者非常有用,可以让二次开发事半功倍。
因为平时工作需要写论文,同时也会写技术报告和文档,所以深知写一本简洁易懂又包含 复杂技术知识的图书有多困难,不仅需要花费大量精力阅读代码、分析细节,还需要在高层进 行抽象总结、简洁表达。在阅读本书的过程中,可以从字里行间感受到作者们的用心和付出的 努力。例如,作者在讲解 ANTLR 4 时,首先自己设计一个简单的例子,并进行相应的代码实现, 在生成逻辑算子树时用到的访问者模式也会以实例进行说明。在技术展现方面,要画出图3.8、 图 7.10 等,不仅需要仔细阅读代码中的每个类的实现,而且需要考虑图形布局以达到直观的效 果。
Spark 是一个易用性、通用性都很高的框架,除 Spark SQL 外,上层还有面向图计算的 GraphX 框架、机器学习 MLlib 库,流处理的 Spark Streaming 库,希望包括几位作者在内的业界 专家能够为读者带来更多高水平的解析和总结。Spark SQL 本身也在演变中,希望本书有第二 版、第三版等,能够不断加入更多的技术解析,不断完善。作为一名研究者,我自己也会努力去设计实现更多能够解决大数据实际问题的系统和方法,共勉之。
许利杰 (@JerryLead) http://www.tcse.cn/?xulijie/
中科院软件所
2018 年 6 月 15 日
前言
极其迅速的信息传播将人们带入了大数据时代,也推动了大数据技术的发展。Spark 于 2009 年诞生于伯克利大学 AMP 实验室,至今已经形成完整的生态圈。除参与度高的开源社区外,各 种相关的技术分享和论坛(如每年的 Spark Summit)也是如火如荼。得益于其灵活的 RDD 计算 模型,Spark 系统高效地支持了各类应用,涉及 SQL 处理、图计算和机器学习等。
本书重点讲解 Spark SQL,该系统在企业中的应用非常广泛,也是 Spark 生态圈中较活跃的 部分。从另一个视角来看,Spark SQL 是近年来 SQL-on-Hadoop 解决方案(包括 Hive、Presto 和 Impala 等)中的佼佼者,结合了数据库 SQL 处理和 Spark 分布式计算模型两个方面的技术,目 标是取代传统的数据仓库。
在实际生产环境中,因为一些个性化的需求,往往涉及对原生的 Spark SQL 系统进行定制 化的改造或新特性的添加,此过程需要开发人员对内部实现有深入的了解。然而笔者发现,目 前业界在这方面的资料还比较缺乏,虽然已经涌现了一系列的文章和书籍,但内容通常都以 Spark 本身为主,或者停留在 API 使用和概括性介绍层面,难以满足开发人员的需求。
评论
还没有评论。