百道网
 您现在的位置:Fun书 > Spark SQL内核剖析
Spark SQL内核剖析


Spark SQL内核剖析

作  者:朱锋 张韶全 黄明

出 版 社:电子工业出版社

出版时间:2018年08月

定  价:69.00

I S B N :9787121343148

所属分类: 专业科技  >  计算机/网络  >  数据库    

标  签:

[查看微博评论]

分享到:

TOP好评推荐   [展开]

TOP内容简介

Spark SQL 是 Spark 技术体系中较有影响力的应用(Killer application),也是 SQL-on-Hadoop 解决方案 中举足轻重的产品。《Spark SQL内核剖析》由 11 章构成,从源码层面深入介绍 Spark SQL 内部实现机制,以及在实际业务场 景中的开发实践,其中包括 SQL 编译实现、逻辑计划的生成与优化、物理计划的生成与优化、Aggregation 算子和 Join 算子的实现与执行、Tungsten 优化技术、生产环境中的一些改造优化经验等。

《Spark SQL内核剖析》不属于入门级教程,需要读者对基本概念有一定的了解。在企业中任职的系统架构师和软件开发人员,以及对大数据、分布式计算和数据库系统实现感兴趣的研究人员,均适合阅读《Spark SQL内核剖析》。

TOP作者简介

朱锋,博士毕业于中科院软件所,研究方向为分布式计算与软件工程。长期关注数据分析、数据库技术和大数据相关系统,并积极参与开源社区贡献。2017年加入腾讯,负责Spark SQL相关平台的开发、优化和维护工作,在SQL-on-Hadoop方面积累了丰富的经验。

张韶全,香港中文大学博士,博士期间研究方向为系统优分布式算法。曾任香港应用研究院研究员、联想香港研发中心高级研究员。现任腾讯大数据平台高级研发工程师,负责腾讯大数据SQL平台的建设与研发,平台规模达到上万台服务器,百万级别业务量,PB级日数据计算量,支撑着腾讯全公司的数据分析业务,拥有多年互联网公司一线的大数据平台设计与研发经验。旨在传播大数据技术和实践经验,使其在不同行业落地生根。

黄明,腾讯T4专家,Spark中国区早期研究者和布道者之一。

TOP目录

第 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 本章小结
总结
参考文献

TOP书摘

推荐序1

互联网技术经过几十年的发展已经渗透到人们生活的方方面面,从云计算、大数据到如今 如火如荼的人工智能和区块链,相信无论是圈内人还是圈外人,对这些名词都耳熟能详了。仔细一算,“大数据”这个概念的出现已经有十多年了,背后催生的技术可以说是百花齐放、百家争鸣。

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 日

TOP 其它信息

装  帧:平装

页  数:268

开  本:16开

正文语种:中文

加载页面用时:94.2863