基本信息
- 作者: JD-Presto研发团队
- 丛书名: “赢在京东”系列技术教程
- 出版社:电子工业出版社
- ISBN:9787121285639
- 上架时间:2016-7-19
- 出版日期:2016 年7月
- 开本:16开
- 页码:312
- 版次:1-1
- 所属分类:计算机 > 数据库 > 综合
【插图】

编辑推荐
从事大数据实时计算以及离线计算相关工作的IT研发及运维人员
内容简介
计算机书籍
Presto是专门为大数据实时查询计算而设计和开发的产品。由于Presto是基于Java语言开发的, 因此,对使用者和开发者而言, Presto极易学习、使用并针对特定的业务场景进行改造开发和性能 优化。无论是对多数据源支持,还是高性能、易用性、可扩展性等方面, Presto都是大数据实时查 询计算产品中的佼佼者。 本书按照由浅入深的顺序对Presto进行了全方位的细致讲解,具体内容包括Presto概述、 Presto安装与部署、 Presto RESTful框架解析、提交查询、生成查询执行计划、查询调度、查询执行、队列、System Connector、 Hive Connector、 Kafka Connector、 Connector开发、 Functions开发、 JD-Presto功能改造、 Presto性能调优、 Presto应用场景。 本书对Java研发工程师,在大数据技术领域从业的研发工程师、运维工程师、架构师,对大数 据研究方向感兴趣的大学老师和学生、以及大数据技术的入门学者,从事海量数据分析应用的开发 者、研究者都有很强的参考价值。
作译者
机构负责人-戴东东:时任京东数据库管理部负责人,负责数据库、大数据等新技术研究工作,拥有近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 章 概述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
前言
12 年来,京东一直以开源技术作为构建自身核心技术体系的基础,在开源领域深耕多年,积极推动行业分享与交流。 JD-Presto 是京东首个贡献于开源社区的软件产品,开创了京东回馈开源社区的先河。
一年前, JD-Presto 研发团队是京东众多研发团队中的普通一员,时至今日,他们已成长为京东负有盛名的研发团队之一。一年来,他们忍受着孤独与寂寞,面对着无数困难与挫折,但他们从未放弃,凭着对技术的热爱、对信念的坚守、对优秀产品的执着追求,勇敢面对困难与挑战,历尽艰辛,终于迎来胜利的曙光。目前 JD-Presto 在京东内部已成功应用于精准营销、安全识别、商家后台、财务报表等十多个生产系统。京东为拥有 JD-Presto研发团队而骄傲!
与书店里的 Hadoop 书籍不同的是,本书是市面上第一本详细介绍 Presto 的书籍。它由浅入深地详细介绍了 Presto 的安装过程、内部运行原理机制、功能特性、性能优化方法,以及在应用过程中常见的问题及解决方案等,同时详细介绍了 JD-Presto 版本的许多新功能及其适用的业务场景。这些功能的成功研发,使得 JD-Presto 版本不仅可用于离线大数据分析计算来提升性能,还可用于多种数据源混合进行实时大数据分析计算,使一些使用其他大数据技术不能解决的业务场景有了一个全新有效的解决方案。同时,他们维护着 Presto在中国社区的建设,鼓舞着和培养了一群 Presto 的爱好者。
今天,国内已有越来越多的技术人员与公司在使用 JD-Presto 版本,相信本书能对读者学习和使用 JD-Presto 版本提供很大的帮助。本书不仅仅满足了初学者对技术书籍的渴求,也适合对 JD-Presto版本有一定使用经验的人员学习参考使用。希望它能成为你在 Presto 技术旅程中的一个朋友,点亮你前进的道路。
张晨
京东集团 CTO
书摘
Presto 在执行 SQL 语句时,将这些 SQL 语句解析为相应的查询,并在分布式集群中执行这些查询。
1. Statement
Statement 语句。其实就是指我们输入的 SQL 语句。 Presto 支持符合 ANSI 标准的 SQL语句。这种语句由子句( Clause)、表达式( Expression)和断言( Predicate)组成。Presto 为什么将语句( Statement)和查询( Query)的概念分开呢?因为在 Presto 中,语句和查询本身就是不同的概念。语句指的是终端用户输入的用文字表示的 SQL 语句;当 Presto 执行输入的 SQL 语句时,会根据 SQL 语句生成查询执行计划,进而生成可以执行的查询( Query),而查询代表的是分布到所有的 Worker 之间执行的实际查询操作。
2. Query
Query 即查询执行。当 Presto 接收一个 SQL 语句并执行时,会解析该 SQL 语句,将其转变成一个查询执行和相关的查询执行计划。一个查询执行代表可以在 Presto 集群中运行的查询,是由运行在各个 Worker 上且各自之间相互关联的阶段( Stage)组成的。
那么 SQL 语句与查询执行之间有什么不同呢?
其实很简单,你可以认为 SQL 语句就是提交给 Presto 的用文字表示的 SQL 执行语句。而查询执行则是为了完成 SQL 语句所表述的查询而实例化的配置信息、组件、查询执行计划和优化信息等。一个查询执行由 Stage、 Task、 Driver、 Split、 Operator 和 DataSource 组成。这些组件之间通过内部联系共同组成了一个查询执行,从而得到 SQL 语句表述的查询,并得到相应的结果集。
3. Stage
Stage 即查询执行阶段。当 Presto 运行 Query 时, Presto 会将一个 Query 拆分成具有层级关系的多个 Stage,一个 Stage 就代表查询执行计划的一部分。例如,当我们执行一个查询,从 Hive 的一张具有 1 亿条记录的表中查询数据并进行聚合操作时, Presto 会创建一个Root Stage(在后面的章节你会知道,该 Stage 就是 Single Stage),该 Stage 聚合其上游 Stage的输出数据,然后将结果输出给 Coordinator,并由 Coordinator 将结果输出给终端用户。Presto 技术内幕。
通常情况下, Stage 之间是树状的层级结构。每个 Query 都有一个 Root Stage。该 Stage用于聚集所有其他 Stage 的输出数据,并将最终的数据反馈给终端用户。需要注意的是,Stage并不会在集群中实际执行,它只是 Coordinator 用于对查询执行计划进行管理和建模的逻辑概念。每个 Stage(除了 Single Stage 和 Source Stage)都会有输入和输出,都会从上游 Stage读取数据,然后将产生结果输出给下游 Stage。需要注意的是: Source Stage 没有上游 Stage,它从 Connector 获取数据。 Single Stage 没有下游 Stage,它的结果直接输出给 Coordinator,并由 Coordinator 输出给终端用户。
Presto 中的 Stage 共分为 4 种,具体介绍如下。
Coordinator_Only:这种类型的 Stage 用于执行 DDL 或者 DML 语句中最终的表结构创建或者更改。
Single:这种类型的 Stage 用于聚合子 Stage 的输出数据,并将最终数据输出给终端用户。
Fixed: 这种类型的 Stage 用于接受其子 Stage 产生的数据并在集群中对这些数据进行分布式的聚合或者分组计算。
Source:这种类型的 Stage 用于直接连接数据源,从数据源读取数据,在读取数据的时候,该阶段也会根据 Presto 对查询执行计划的优化完成相关的断言下发( Predicate PushDown)和条件过滤等。
说明
由于一个 SQL 查询可以被分解为多个前后关联的 Stage,在这里我们约定:按照数据的流向,越靠近数据源的 Stage 越处于上游,越远离数据源的 Stage 越处于下游。
4. Exchange
Exchange 的字面意思就是 “交换”。 Presto 的 Stage 是通过 Exchange 来连接另一个 Stage的。Exchange 用于完成有上下游关系的 Stage 之间的数据交换。在 Presto 中有两种 Exchange:Output Buffer 和 Exchange Client。生产数据的 Stage 通过名为 Output Buffer 的 Exchange 将数据传送给其下游的 Stage(根据数据的流向,分为上下游,你可以将 Presto 中查询执行过程中的数据比喻成一条河流,那么产生数据的 Stage 相对于消费数据的 Stage 来说,就是上游)。消费数据的 Stage 通过名为 Exchange Client 的 Exchange 从上游 Stage 读取数据。如果当前的 Stage 是 Source 类型的 Stage,那么该 Stage 则是直接通过相应的 Connector从数据源读取数据的。而该 Stage 则是通过名为 Source Operator 的 Operator 与 Connector 进行交互的。例如,如果一个 Source Stage 直接从 HDFS 获取数据,那么这种操作不是通过Exchange Client 来完成的,而是通过运行于 Driver 中的 Source Operator 来完成的。