编辑推荐
null
内容简介
Presto是专门为大数据实时查询计算而设计和开发的产品。由于Presto是基于Java语言开发的,因此,对使用者和开发者而言,Presto极易学习、使用并针对特定的业务场景进行改造开发和性能优化。无论是对多数据源支持,还是高性能、易用性、可扩展性等方面,Presto都是大数据实时查询计算产品中的佼佼者。 JD-Presto研发团队著的《Presto技术内幕(赢在京东系列技术教程)》按照由浅入深的顺序对Presto进行了全方位的细致讲解,具体内容包括Presto概述、Presto安装与部署、PrestoRESTful框架解析、提交查询、生成查询执行计划、查询调度、查询执行、队列、SystemConnector、HiveConnector、KafkaConnector、Connector开发、Functions开发、JD-Presto功能改造、Presto性能调优、Presto应用场景。 本书对Java研发工程师,在大数据技术领域从业的研发工程师、运维工程师、架构师,对大数据研究方向感兴趣的大学老师和学生、以及大数据技术的入门学者,从事海量数据分析应用的开发者、研究者都有很强的参考。
作者介绍
在数据洞察、数据分析、统计解析等领域具有丰富经验,现担任京东数据罗盘产品经理;京东易搜产品经理,曾担任香港上市企业数据分析师,国内最早一批的电商运营人员。乐于为商家提供数据分析、决策与指导建议。
目 录
第一部分 基础篇 第1章 概述 1.1 Presto背景及发展 1.2 Presto特点 1.3 基本概念 1.3.1 Presto服务进程 1.3.2 Presto模型 1.3.3 Presto查询执行模型 1.4 Presto整体架构 1.4.1 硬件架构 1.4.2 软件架构 1.5 小结 第2章 Presto安装与部署 2.1 环境说明 2.2 准备工作 2.2.1 建立SSH信任关系 2.2.2 安装Java 2.2.3 安装Maven 2.2.4 安装Hive 2.3 源码编译 2.3.1 下载源码 2.3.2 源码结构说明 2.3.3 编译 2.4 部署 2.4.1 服务部署 2.4.2 客户端部署 2.4.3 JDBC使用 2.5 小结 第二部分 核心设计篇 第3章 PrestoRESTful框架解析 3.1 Statement服务接口 3.2 Query服务接口 3.3 Stage服务接口 3.4 Task服务接口 3.5 小结 第4章 提交查询 4.1 提交查询的步骤 4.2 源码解析 4.3 提交查询的流程 4.4 小结 第5章 生成查询执行计划 5.1 基本概念 5.1.1 Node 5.1.2 MetadataAPI 5.2 词法与语法分析 5.2.1 语法规则 5.2.2 词法分析 5.2.3 语法分析 5.3 获取QueryExecution 5.3.1 获取QueryExecutionFactory 5.3.2 创建QueryExecution 5.3.3 启动QueryExecution 5.4 语义分析 5.4.1 Statement分析 5.4.2 Relation分析 5.4.3 表达式分析 5.5 执行计划生成 5.5.1 执行计划节点 5.5.2 SQL执行计划 5.5.3 Relation执行计划 5.5.4 Query执行计划 5.6 执行计划优化 5.6.1 ImplementSampleAsFilter 5.6.2 Canonicalizedata-xsss 5.6.3 Simplifydata-xsss 5.6.4 UnaliasSymbolReferences 5.6.5 PruneRedundantProjections 5.6.6 SetFlatteningOptimizer 5.6.7 LimitPushDown 5.6.8 PredicatePushDown 5.6.9 MergeProjections 5.6.10 ProjectionPushDown 5.6.11 IndexJoinOptimizer 5.6.12 CountConstantOptimizer 5.6.13 WindowFilterPushDown 5.6.14 HashGenerationOptimizer 5.6.15 PruneUnreferencedOutputs 5.6.16 MetadataQueryOptimizer 5.6.17 SingleDistinctOptimizer 5.6.18 BeginTableWrite 5.6.19 AddExchanges 5.6.20 PickLayout 5.7 执行计划分段 5.7.1 Source 5.7.2 Fixed 5.7.3 Single 5.7.4 Coordinator.only 5.8 示例 5.8.1 Count执行计划 5.8.2 Join执行计划 5.9 小结 第6章 查询调度 6.1 生成调度执行器 6.2 查询调度过程 6.2.1 NodeManager 6.2.2 NodeSelector 6.3 小结 第7章 查询执行 7.1 查询执行逻辑 7.2 Task调度 7.2.1 SourceTask调度 7.2.2 FixedTask调度 7.2.3 SingleTask调度 7.2.4 Coordinator.OnlyTask调度 7.3 Task执行 7.3.1 创建Task 7.3.2 更新Task 7.3.3 运行Task 7.4 小结 第8章 队列 8.1 配置说明 8.1.1 queues队列定义 8.1.2 rules规则定义 8.2 队列加载 8.3 队列匹配 8.4 小结 第9章 SystemConnector 9.1 SystemConnector使用 9.1.1 Information.schema 9.1.2 Metadata 9.1.3 Runtime 9.2 SystemConnector实现 9.2.1 Information.schema实现 9.2.2 SystemConnector实现 9.3 小结 第10章 HiveConnector 10.1 与Hive的结合 10.2 Split分片管理 10.3 数据读取 10.4 CreateTableAsSelect的实现 10.5 小结 第11章 KafkaConnector 11.1 认识KafkaConnector 11.1.1 配置 11.1.2 配置属性 11.1.3 内置字段 11.1.4 表定义文件 11.1.5 Kafka中的key和message 11.1.6 行解码 11.1.7 日期和时间解码器 11.1.8 文本解码器 11.1.9 数值解码器 11.2 Kafka连接器使用教程 11.2.1 安装ApacheKafka 11.2.2 下载数据 11.2.3 在Presto中配置Kafkatopics 11.2.4 基本数据查询 11.2.5 添加表定义文件 11.2.6 将message中所有值映射到不同列 11.2.7 使用实时数据 11.3 KafkaConnector获取数据 11.3.1 Split分片管理 11.3.2 数据读取 11.4 小结 第12章 Connector开发 12.1 创建Maven工程 12.2 注册Plugin 12.3 Connector 12.4 Metadata 12.5 SplitManager 12.6 RecordSetProvider 12.7 小结 第13章 Functions开发 13.1 Function注册 13.2 窗口函数 13.3 聚合函数 13.4 小结 第三部分 高级篇 第14章 JD.Presto功能改造 14.1 PDBO功能开发 14.1.1 JDBCSplit剖析 14.1.2 JdbcRecordCursor剖析 14.1.3 分批次读取实现原理 14.1.4 动态步长实现原理 14.1.5 条件下发 14.1.6 PDBO配置定义 14.2 DDL及DML支持 14.2.1 Hive连接器Insert功能 14.2.2 Hive连接器CTAS动态分区表功能 14.3 动态增加、修改、删除Catalog 14.3.1 目的 14.3.2 现状 14.3.3 实现 14.3.4 效果 14.4 小结 第15章 Presto性能调优 15.1 合理设计分区 15.2 GroupBy字句优化 15.3 使用模糊聚合函数 15.4 合并多条Like子句为一条regexp.like子句 15.5 大表放在Join子句左边 15.6 关闭distributedhashjoin 15.7 使用ORC存储 15.8 小结 第16章 Presto应用场景 16.1 ETL 16.2 实时数据计算 16.3 Ad.Hoc查询 16.4 实时数据流分析 16.5 小结 附录A 常见问题及解决办法 A.1 同时访问两个Hadoop集群 A.2 Kafka集群重启后无法获取数据 A.3 Taskexceededmaxmemorysize A.4 SQL中In子句太长导致栈溢出错误 A.5 高并发导致大量查询出错 附录B Presto配置参数说明 附录C Presto执行信息说明
媒体评论
null