Presto技术内幕

Presto技术内幕
分享
扫描下方二维码分享到微信
打开微信,点击右上角”+“,
使用”扫一扫“即可将网页分享到朋友圈。
2016-06
版次: 1
ISBN: 9787121285639
定价: 69.00
装帧: 平装
开本: 16开
纸张: 胶版纸
页数: 312页
字数: 490千字
139人买过
  •   Presto是专门为大数据实时查询计算而设计和开发的产品。由于Presto是基于Java语言开发的,因此,对使用者和开发者而言,Presto极易学习、使用并针对特定的业务场景进行改造开发和性能优化。无论是对多数据源支持,还是高性能、易用性、可扩展性等方面, Presto都是大数据实时查询计算产品中的佼佼者。

      《Presto技术内幕》按照由浅入深的顺序对Presto进行了全方位的细致讲解,具体内容包括Presto概述、 Presto安装与部署、 Presto RESTful框架解析、提交查询、生成查询执行计划、查询调度、查询执行、队列、System Connector、 Hive Connector、 Kafka Connector、 Connector开发、 Functions开发、 JD-Presto功能改造、 Presto性能调优、 Presto应用场景。



    翁志:现任京东首席技术顾问,信息安全部负责人,硅谷研发中心负责人,主要负责京东的技术创新,信息安全以及对外技术交流合作等,兼任全国信息安全标准化技术委员会委员。拥有近20年IT技术开发经验,拥有十余项国内外专利。2013年加入京东,领导京东大数据开源计算框架Presto荣获“2015COPU开源优秀项目奖”,本人获“中国开源杰出人物”称号。

     

    机构负责人-戴东东:时任京东数据库管理部负责人,负责数据库、大数据等新技术研究工作,拥有近15年IT技术研发及团队管理经验,侧重于海量数据库、大数据、机器学习等技术领域的研究。2012年加入京东,组建并带领JD-Presto研发团队荣获多个国内外奖项。

     

    高级架构师-吕信:Presto中国社区创建者与管理者,主要从事Hadoop、JD-Presto大数据开源产品及京东数据云的研发与架构设计,具有丰富的大数据解决方案及大数据公有云解决方案的设计及开发经验。

     

    架构师-郭李明:2012年入职京东,一直从事与大数据分布式架构相关的技术研究,参与并主导了Presto京东开源版本的核心功能开发,致力于大数据计算的解决方案研究。

     

    高级工程师-袁安峰:擅长Presto性能调优与Bug修复,对Presto的SQL优化器有深入研究, 同时一直致力于对Presto底层实现原理的研究和探索。负责CSDN极客社区Presto板块维护,热衷于分享研究Presto技术原理的文章以及对Presto使用的心得和体会。

     

    高级工程师-孔云龙:对HDFS、MapReduce、Hive等Hadoop生态系统中的技术有比较深入研究,在分布式查询引擎Presto和分布式消息系统Kafka的功能改造和优化方面积累了丰富的经验。目前正在京东公有云部门从事数据计算服务相关研发工作。

     

      第一部分 基础篇

    第 1 章 Presto概述2

    1.1 Presto 背景及发展2

    1.2 Presto 特点2

    1.3 基本概念3

    1.3.1 Presto 服务进程3

    1.3.2 Presto 模型4

    1.3.3 Presto 查询执行模型 5

    1.4 Presto 整体架构9

    1.4.1 硬件架构9

    1.4.2 软件架构9

    1.5 小结11

    第 2 章 Presto 安装与部署12

    2.1 环境说明 12

    2.2 准备工作13

    2.2.1 建立 SSH 信任关系13

    2.2.2 安装 Java 17

    2.2.3 安装 Maven 17

    2.2.4 安装 Hive 18

    2.3 源码编译21

    2.3.1 下载源码 21

    2.3.2 源码结构说明 22

    2.3.3 编译 26

    2.4 部署 30

    2.4.1 服务部署 30

    2.4.2 客户端部署 38

    2.4.3 JDBC 使用 40

    2.5 小结 42

    第二部分 核心设计篇

    第 3 章 Presto RESTful 框架解析 44

    3.1 Statement 服务接口 44

    3.2 Query 服务接口 47

    3.3 Stage 服务接口48

    3.4 Task 服务接口49

    3.5 小结 52

    第 4 章 提交查询 53

    4.1 提交查询的步骤 53

    4.2 源码解析 53

    4.3 提交查询的流程 60

    4.4 小结 61

    第 5 章 生成查询执行计划 62

    5.1 基本概念 63

    5.1.1 Node 63

    5.1.2 Metadata API 67

    5.2 词法与语法分析 68

    5.2.1 语法规则 69

    5.2.2 词法分析 69

    5.2.3 语法分析 71

    5.3 获取 QueryExecution 72

    5.3.1 获取 QueryExecutionFactory 72

    5.3.2 创建 QueryExecution 73

    5.3.3 启动 QueryExecution 74

    5.4 语义分析 77

    5.4.1 Statement 分析 77

    5.4.2 Relation 分析84

    5.4.3 表达式分析 91

    5.5 执行计划生成91

    5.5.1 执行计划节点 91

    5.5.2 SQL 执行计划93

    5.5.3 Relation 执行计划95

    5.5.4 Query 执行计划 99

    5.6 执行计划优化102

    5.6.1 ImplementSampleAsFilter 102

    5.6.2 CanonicalizeExpressions 102

    5.6.3 SimplifyExpressions 102

    5.6.4 UnaliasSymbolReferences 103

    5.6.5 PruneRedundantProjections 103

    5.6.6 SetFlatteningOptimizer 103

    5.6.7 LimitPushDown 104

    5.6.8 PredicatePushDown 104

    5.6.9 MergeProjections 104

    5.6.10 ProjectionPushDown 104

    5.6.11 IndexJoinOptimizer105

    5.6.12 CountConstantOptimizer 105

    5.6.13 WindowFilterPushDown 105

    5.6.14 HashGenerationOptimizer 105

    5.6.15 PruneUnreferencedOutputs 106

    5.6.16 MetadataQueryOptimizer 106

    5.6.17 SingleDistinctOptimizer 106

    5.6.18 BeginTableWrite 106

    5.6.19 AddExchanges 107

    5.6.20 PickLayout 107

    5.7 执行计划分段107

    5.7.1 Source 107

    5.7.2 Fixed 107

    5.7.3 Single 107

    5.7.4 Coordinator_only 107

    5.8 示例108

    5.8.1 Count 执行计划108

    5.8.2 Join 执行计划108

    5.9 小结110

    第 6 章 查询调度 111

    6.1 生成调度执行器 111

    6.2 查询调度过程 113

    6.2.1 NodeManager 114

    6.2.2 NodeSelector 115

    6.3 小结 118

    第 7 章 查询执行 119

    7.1 查询执行逻辑 120

    7.2 Task 调度120

    7.2.1 Source Task 调度120

    7.2.2 Fixed Task 调度126

    7.2.3 Single Task 调度 128

    7.2.4 Coordinator_Only Task 调度 128

    7.3 Task 执行129

    7.3.1 创建 Task 129

    7.3.2 更新 Task 135

    7.3.3 运行 Task 140

    7.4 小结 147

    第 8 章 队列 148

    8.1 配置说明 148

    8.1.1 queues 队列定义149

    8.1.2 rules 规则定义 149

    8.2 队列加载 150

    8.3 队列匹配 151

    8.4 小结 154

    第 9 章 System Connector 155

    9.1 System Connector 使用155

    9.1.1 Information_schema 155

    9.1.2 Metadata 157

    9.1.3 Runtime 157

    9.2 System Connector 实现159

    9.2.1 Information_schema 实现160

    9.2.2 System Connector 实现163

    9.3 小结 168

    第 10 章 Hive Connector 169

    10.1 与 Hive 的结合 170

    10.2 Split 分片管理 175

    10.3 数据读取179

    10.4 Create Table As Select 的实现 182

    10.5 小结186

    第 11 章 Kafka Connector 187

    11.1 认识 Kafka Connector 187

    11.1.1 配置187

    11.1.2 配置属性187

    11.1.3 内置字段189

    11.1.4 表定义文件190

    11.1.5 Kafka 中的 key 和 message 191

    11.1.6 行解码192

    11.1.7 日期和时间解码器194

    11.1.8 文本解码器194

    11.1.9 数值解码器194

    11.2 Kafka 连接器使用教程194

    11.2.1 安装 Apache Kafka195

    11.2.2 下载数据195

    11.2.3 在 Presto 中配置 Kafka topics 197

    11.2.4 基本数据查询197

    11.2.5 添加表定义文件199

    11.2.6 将 message 中所有值映射到不同列200

    11.2.7 使用实时数据202

    11.3 Kafka Connector 获取数据 207

    11.3.1 Split 分片管理207

    11.3.2 数据读取209

    11.4 小结210

    第 12 章 Connector 开发211

    12.1 创建 Maven 工程 211

    12.2 注册 Plugin 213

    12.3 Connector 213

    12.4 Metadata 215

    12.5 SplitManager 217

    12.6 RecordSetProvider 218

    12.7 小结 219

    第 13 章 Functions 开发220

    13.1 Function 注册 220

    13.2 窗口函数 225

    13.3 聚合函数 229

    13.4 小结 232

    第三部分 高级篇

    第 14 章 JD-Presto 功能改造234

    14.1 PDBO 功能开发234

    14.1.1 JDBC Split 剖析235

    14.1.2 JdbcRecordCursor 剖析 238

    14.1.3 分批次读取实现原理 240

    14.1.4 动态步长实现原理 243

    14.1.5 条件下发 245

    14.1.6 PDBO 配置定义 247

    14.2 DDL 及 DML 支持 250

    14.2.1 Hive 连接器 Insert 功能 250

    14.2.2 Hive 连接器 CTAS 动态分区表功能 252

    14.3 动态增加、修改、删除 Catalog 254

    14.3.1 目的 254

    14.3.2 现状 254

    14.3.3 实现 255

    14.3.4 效果 258

    14.4 小结 258

    第 15 章 Presto 性能调优259

    15.1 合理设计分区 259

    15.2 Group By 字句优化 259

    15.3 使用模糊聚合函数 259

    15.4 合并多条 Like 子句为一条 regexp_like 子句260

    15.5 大表放在 Join 子句左边260

    15.6 关闭 distributed hash join 261

    15.7 使用 ORC 存储 261

    15.8 小结 262

    第 16 章 Presto 应用场景 263

    16.1 ETL 263

    16.2 实时数据计算264

    16.3 Ad-Hoc 查询266

    16.4 实时数据流分析266

    16.5 小结268

    附录 A 常见问题及解决办法269

    A.1 同时访问两个 Hadoop 集群269

    A.2 Kafka 集群重启后无法获取数据272

    A.3 Task exceeded max memory size 277

    A.4 SQL 中 In 子句太长导致栈溢出错误278

    A.5 高并发导致大量查询出错279

    附录 B Presto 配置参数说明 282

    附录 C Presto 执行信息说明289

  • 内容简介:
      Presto是专门为大数据实时查询计算而设计和开发的产品。由于Presto是基于Java语言开发的,因此,对使用者和开发者而言,Presto极易学习、使用并针对特定的业务场景进行改造开发和性能优化。无论是对多数据源支持,还是高性能、易用性、可扩展性等方面, Presto都是大数据实时查询计算产品中的佼佼者。

      《Presto技术内幕》按照由浅入深的顺序对Presto进行了全方位的细致讲解,具体内容包括Presto概述、 Presto安装与部署、 Presto RESTful框架解析、提交查询、生成查询执行计划、查询调度、查询执行、队列、System Connector、 Hive Connector、 Kafka Connector、 Connector开发、 Functions开发、 JD-Presto功能改造、 Presto性能调优、 Presto应用场景。



  • 作者简介:
    翁志:现任京东首席技术顾问,信息安全部负责人,硅谷研发中心负责人,主要负责京东的技术创新,信息安全以及对外技术交流合作等,兼任全国信息安全标准化技术委员会委员。拥有近20年IT技术开发经验,拥有十余项国内外专利。2013年加入京东,领导京东大数据开源计算框架Presto荣获“2015COPU开源优秀项目奖”,本人获“中国开源杰出人物”称号。

     

    机构负责人-戴东东:时任京东数据库管理部负责人,负责数据库、大数据等新技术研究工作,拥有近15年IT技术研发及团队管理经验,侧重于海量数据库、大数据、机器学习等技术领域的研究。2012年加入京东,组建并带领JD-Presto研发团队荣获多个国内外奖项。

     

    高级架构师-吕信:Presto中国社区创建者与管理者,主要从事Hadoop、JD-Presto大数据开源产品及京东数据云的研发与架构设计,具有丰富的大数据解决方案及大数据公有云解决方案的设计及开发经验。

     

    架构师-郭李明:2012年入职京东,一直从事与大数据分布式架构相关的技术研究,参与并主导了Presto京东开源版本的核心功能开发,致力于大数据计算的解决方案研究。

     

    高级工程师-袁安峰:擅长Presto性能调优与Bug修复,对Presto的SQL优化器有深入研究, 同时一直致力于对Presto底层实现原理的研究和探索。负责CSDN极客社区Presto板块维护,热衷于分享研究Presto技术原理的文章以及对Presto使用的心得和体会。

     

    高级工程师-孔云龙:对HDFS、MapReduce、Hive等Hadoop生态系统中的技术有比较深入研究,在分布式查询引擎Presto和分布式消息系统Kafka的功能改造和优化方面积累了丰富的经验。目前正在京东公有云部门从事数据计算服务相关研发工作。

     

     
  • 目录:
    第一部分 基础篇

    第 1 章 Presto概述2

    1.1 Presto 背景及发展2

    1.2 Presto 特点2

    1.3 基本概念3

    1.3.1 Presto 服务进程3

    1.3.2 Presto 模型4

    1.3.3 Presto 查询执行模型 5

    1.4 Presto 整体架构9

    1.4.1 硬件架构9

    1.4.2 软件架构9

    1.5 小结11

    第 2 章 Presto 安装与部署12

    2.1 环境说明 12

    2.2 准备工作13

    2.2.1 建立 SSH 信任关系13

    2.2.2 安装 Java 17

    2.2.3 安装 Maven 17

    2.2.4 安装 Hive 18

    2.3 源码编译21

    2.3.1 下载源码 21

    2.3.2 源码结构说明 22

    2.3.3 编译 26

    2.4 部署 30

    2.4.1 服务部署 30

    2.4.2 客户端部署 38

    2.4.3 JDBC 使用 40

    2.5 小结 42

    第二部分 核心设计篇

    第 3 章 Presto RESTful 框架解析 44

    3.1 Statement 服务接口 44

    3.2 Query 服务接口 47

    3.3 Stage 服务接口48

    3.4 Task 服务接口49

    3.5 小结 52

    第 4 章 提交查询 53

    4.1 提交查询的步骤 53

    4.2 源码解析 53

    4.3 提交查询的流程 60

    4.4 小结 61

    第 5 章 生成查询执行计划 62

    5.1 基本概念 63

    5.1.1 Node 63

    5.1.2 Metadata API 67

    5.2 词法与语法分析 68

    5.2.1 语法规则 69

    5.2.2 词法分析 69

    5.2.3 语法分析 71

    5.3 获取 QueryExecution 72

    5.3.1 获取 QueryExecutionFactory 72

    5.3.2 创建 QueryExecution 73

    5.3.3 启动 QueryExecution 74

    5.4 语义分析 77

    5.4.1 Statement 分析 77

    5.4.2 Relation 分析84

    5.4.3 表达式分析 91

    5.5 执行计划生成91

    5.5.1 执行计划节点 91

    5.5.2 SQL 执行计划93

    5.5.3 Relation 执行计划95

    5.5.4 Query 执行计划 99

    5.6 执行计划优化102

    5.6.1 ImplementSampleAsFilter 102

    5.6.2 CanonicalizeExpressions 102

    5.6.3 SimplifyExpressions 102

    5.6.4 UnaliasSymbolReferences 103

    5.6.5 PruneRedundantProjections 103

    5.6.6 SetFlatteningOptimizer 103

    5.6.7 LimitPushDown 104

    5.6.8 PredicatePushDown 104

    5.6.9 MergeProjections 104

    5.6.10 ProjectionPushDown 104

    5.6.11 IndexJoinOptimizer105

    5.6.12 CountConstantOptimizer 105

    5.6.13 WindowFilterPushDown 105

    5.6.14 HashGenerationOptimizer 105

    5.6.15 PruneUnreferencedOutputs 106

    5.6.16 MetadataQueryOptimizer 106

    5.6.17 SingleDistinctOptimizer 106

    5.6.18 BeginTableWrite 106

    5.6.19 AddExchanges 107

    5.6.20 PickLayout 107

    5.7 执行计划分段107

    5.7.1 Source 107

    5.7.2 Fixed 107

    5.7.3 Single 107

    5.7.4 Coordinator_only 107

    5.8 示例108

    5.8.1 Count 执行计划108

    5.8.2 Join 执行计划108

    5.9 小结110

    第 6 章 查询调度 111

    6.1 生成调度执行器 111

    6.2 查询调度过程 113

    6.2.1 NodeManager 114

    6.2.2 NodeSelector 115

    6.3 小结 118

    第 7 章 查询执行 119

    7.1 查询执行逻辑 120

    7.2 Task 调度120

    7.2.1 Source Task 调度120

    7.2.2 Fixed Task 调度126

    7.2.3 Single Task 调度 128

    7.2.4 Coordinator_Only Task 调度 128

    7.3 Task 执行129

    7.3.1 创建 Task 129

    7.3.2 更新 Task 135

    7.3.3 运行 Task 140

    7.4 小结 147

    第 8 章 队列 148

    8.1 配置说明 148

    8.1.1 queues 队列定义149

    8.1.2 rules 规则定义 149

    8.2 队列加载 150

    8.3 队列匹配 151

    8.4 小结 154

    第 9 章 System Connector 155

    9.1 System Connector 使用155

    9.1.1 Information_schema 155

    9.1.2 Metadata 157

    9.1.3 Runtime 157

    9.2 System Connector 实现159

    9.2.1 Information_schema 实现160

    9.2.2 System Connector 实现163

    9.3 小结 168

    第 10 章 Hive Connector 169

    10.1 与 Hive 的结合 170

    10.2 Split 分片管理 175

    10.3 数据读取179

    10.4 Create Table As Select 的实现 182

    10.5 小结186

    第 11 章 Kafka Connector 187

    11.1 认识 Kafka Connector 187

    11.1.1 配置187

    11.1.2 配置属性187

    11.1.3 内置字段189

    11.1.4 表定义文件190

    11.1.5 Kafka 中的 key 和 message 191

    11.1.6 行解码192

    11.1.7 日期和时间解码器194

    11.1.8 文本解码器194

    11.1.9 数值解码器194

    11.2 Kafka 连接器使用教程194

    11.2.1 安装 Apache Kafka195

    11.2.2 下载数据195

    11.2.3 在 Presto 中配置 Kafka topics 197

    11.2.4 基本数据查询197

    11.2.5 添加表定义文件199

    11.2.6 将 message 中所有值映射到不同列200

    11.2.7 使用实时数据202

    11.3 Kafka Connector 获取数据 207

    11.3.1 Split 分片管理207

    11.3.2 数据读取209

    11.4 小结210

    第 12 章 Connector 开发211

    12.1 创建 Maven 工程 211

    12.2 注册 Plugin 213

    12.3 Connector 213

    12.4 Metadata 215

    12.5 SplitManager 217

    12.6 RecordSetProvider 218

    12.7 小结 219

    第 13 章 Functions 开发220

    13.1 Function 注册 220

    13.2 窗口函数 225

    13.3 聚合函数 229

    13.4 小结 232

    第三部分 高级篇

    第 14 章 JD-Presto 功能改造234

    14.1 PDBO 功能开发234

    14.1.1 JDBC Split 剖析235

    14.1.2 JdbcRecordCursor 剖析 238

    14.1.3 分批次读取实现原理 240

    14.1.4 动态步长实现原理 243

    14.1.5 条件下发 245

    14.1.6 PDBO 配置定义 247

    14.2 DDL 及 DML 支持 250

    14.2.1 Hive 连接器 Insert 功能 250

    14.2.2 Hive 连接器 CTAS 动态分区表功能 252

    14.3 动态增加、修改、删除 Catalog 254

    14.3.1 目的 254

    14.3.2 现状 254

    14.3.3 实现 255

    14.3.4 效果 258

    14.4 小结 258

    第 15 章 Presto 性能调优259

    15.1 合理设计分区 259

    15.2 Group By 字句优化 259

    15.3 使用模糊聚合函数 259

    15.4 合并多条 Like 子句为一条 regexp_like 子句260

    15.5 大表放在 Join 子句左边260

    15.6 关闭 distributed hash join 261

    15.7 使用 ORC 存储 261

    15.8 小结 262

    第 16 章 Presto 应用场景 263

    16.1 ETL 263

    16.2 实时数据计算264

    16.3 Ad-Hoc 查询266

    16.4 实时数据流分析266

    16.5 小结268

    附录 A 常见问题及解决办法269

    A.1 同时访问两个 Hadoop 集群269

    A.2 Kafka 集群重启后无法获取数据272

    A.3 Task exceeded max memory size 277

    A.4 SQL 中 In 子句太长导致栈溢出错误278

    A.5 高并发导致大量查询出错279

    附录 B Presto 配置参数说明 282

    附录 C Presto 执行信息说明289

查看详情
相关图书 / 更多
Presto技术内幕
Premiere Pro 2022视频编辑标准教程(微课版)(全彩版)
朱琦;魏惠茹;王婷婷
Presto技术内幕
Procreate数字绘画 超可爱萌物手账技法
美术宝
Presto技术内幕
Premiere Pro 2023全面精通:视频剪辑+颜色调整+转场特效+字幕制作+案例实战
周玉姣
Presto技术内幕
Proceedingsofthe8thInternationalConference
Metals 著;The、Chinese、Society、for、中国金属学会 编
Presto技术内幕
Premiere CC 2018影视剪辑基础与实例教程
张凡 编著
Presto技术内幕
Proteus教程——电子线路设计、制版与仿真(修订版)
朱清慧;张凤蕊;翟天嵩;王志奎
Presto技术内幕
Processing程序交互与动态视觉设计实战
路倩;李莹;王志新
Presto技术内幕
Premiere职业应用项目教程 第2版
黄春光 孙晓春 主编
Presto技术内幕
Premiere 2022视频编辑基础教程(微课版)
文杰书院
Presto技术内幕
Procreate厚涂数字绘画鉴赏与实战
王常圣
Presto技术内幕
Premiere Pro 2022实用教程
任媛媛
Presto技术内幕
Premiere+AE影视后期处理从新手到高手
郭晶晶