译者序
对大数据领域感兴趣的读者恐怕已经对它的历史非常熟悉了:最初,由 Google 发表的关于 MapReduce、GFS 和 BigTable 等主题的论文衍生出了由 Hadoop、HDFS、HBase 等组件组成的 Hadoop 生态系统。之后,包括 Apache Hive、Apache Spark 和 Apache Flink 在内的各种工具如雨后春笋一般涌现出来。它们有的适合用来进行批数据处理,有的可以进行实时数据分析,有的支持分布式事务,满足了大数据处理方方面面的需求。在这些系统中,有一类支持 SQL 数据查询的数据处理系统非常重要:这类系统允许用户使用标准 SQL 对其数据仓库中的数据进行查询,无论是技术人员还是数据分析师都可以方便地使用。
Presto 正是这一类系统中的佼佼者。
说到 Hadoop 生态系统中的 SQL 查询处理引擎,就不得不先提到 Apache Hive ——一个可以将用户输入的 SQL 查询翻译成如 MapReduce、Spark 等计算模型的任务,并在集群中调度和执行的系统。长期以来,Apache Hive 都是在 Hadoop 集群上执行 SQL 查询的标准组件。
本书所介绍的 Presto 和 Apache Hive 一样,都是从 Facebook 内部孵化出来的。它早期的设计目标就是解决 Apache Hive 的一些主要问题,尤其是要提高查询的执行性能。正因为如此,Presto 在很多方面兼容 Apache Hive,但又有所不同。在本书中,你可以详细了解到二者设计上的异同和产生的效果。简单来说,Presto 提供了一个查询性能远超 Apache Hive,适用于交互式查询和快速数据处理的平台。它还支持联邦查询,使得用户可以将分散在系统各处的数据孤岛整合起来,成为统一的数据查询接入点,方便用户管理各类数据。在很多企业和组织里,Presto 已经取代 Apache Hive 成为各个部门接入数据系统的统一接口,每天满足成千上万次的查询需求。
本书的第一部分提供了对 Presto 的简要介绍和使用说明,你可以从中了解到 Presto 的历史发展、主要功能以及如何简单地安装和使用它。本书的第二部分是为进阶用户准备的,它介绍了 Presto 的内部构造、基本原理、部署配置、连接器和 SQL 语句的使用等。这部分内容全面而详细地介绍了使用 Presto 的各种细节,是本书的精华所在。学习完这一部分的知识,你应该具备正确使用和调优 Presto 的大部分技能。这一部分也很适合作为速查手册使用。本书的第三部分提供了在生产环境部署 Presto 必备的知识,帮助你配置安全特性、与其他工具集成和进行集群部署,还提供了一些真实世界中的部署案例。建议即将在生产环境中部署 Presto 的读者将这一部分作为参考。
在阅读完本书后,你不但可以编写适合于 Presto 执行的 SQL 查询,熟悉 Presto 运维方面的各种知识,而且还可以对 Presto 的内部构造有所了解。希望本书能为对 Presto 感兴趣的读者提供一份好的实战指南,帮助各位读者理解 Presto 的方方面面。
Presto 的繁荣发展离不开它的开源社区:在 Facebook 内部上线之后不久它就宣告开源。实际上,Presto 从开发伊始就将开源作为目标之一。现在,Presto 丰富的生态系统已经被构建出来,这个生态系统包括数不清的开源插件和库、提供支持服务的组织和企业,以及云服务提供商等。目前,Presto 的开源版本主要有两个分支,一个是由 Facebook 主导的 PrestoDB 项目,另一个是由 Presto 软件基金会和部分 Presto 创始人维护的 PrestoSQL 项目。值得注意的是,后者已于 2020 年 12 月更名为 Trino 并继续发展。本书的主要作者来自 PrestoSQL/Trino 项目,所讨论的主要内容也基于 PrestoSQL/Trino 项目的实现。目前来看,这两个项目还并未产生大的分化,本书中大部分的讨论可以同时应用在这两个项目上,但仍建议你在阅读此书和开始使用 Presto 时仔细分辨项目和版本的差别。
最后,还要特别感谢在本书翻译和出版过程中参与审校、排版和付出其他辛勤劳动的各位工作人员。是你们的努力使得本书可以以如此完整的面貌呈现给读者。
张晨 黄鹏程 傅宇
2021 年 1 月