译者序
Facebook(现已更名为Meta)于2012年创建了分布式大数据SQL查询引擎Presto,到目前已经超过10年了。Presto也从最早的项目逐步分叉为两个开源项目:PrestoDB和TrinoDB。两个项目的社区相互竞争的同时也相互借鉴,共同推动着SQL查询引擎的进步。
作为通用分布式大数据SQL查询引擎,Trino适用于各类交互式分析查询场景,支持从GB到PB级别的数据量。它不仅有着清晰的架构,能够独立运行,不依赖于任何其他外部系统,而且提供了丰富的数据源插件接口,完美对接外部存储系统并支持添加自定义函数,从而轻松实现跨源和跨库查询。
经过10年的创新,Trino已经真正成长起来,不仅突破了仅面向优化Hive查询对象存储的场景限制,还突破了单一公司主导的机制限制,成长为一个繁荣的社区和生态体系。目前,AWS已经将云上的交互式查询引擎进行了升级,引入了Trino开源项目的最新功能,开放给全球用户使用(https://aws.amazon.com/cn/about-aws/whats-new/2022/10/amazon-athena-announces-upgraded-query-engine/)。
第2版相对于第1版做了大量更新,以跟上Trino的快速创新。在介绍Trino的历史、架构、基本工作原理等内容的基础上,第2版对社区如下方面的新进展和增强也做了介绍:
•运行时和部署 Trino从Java 7转移到Java 8,然后转移到Java 11,直到最近转移到Java 17,每次转移都受益于运行时性能的创新以及改进的Java语言特性。在Java 17中,Trino也即将开始大量此类改进。
通过Helm chart可以方便地将Trino集群部署到Kubernetes上,以实现数百个CPU内核和数TB内存的弹性集群部署。如果不使用数据仓库,就无法使用查询合并来自不同系统的数据。
•安全 Trino不仅支持Kerberos,还广泛采用并支持自动证书创建、内部通信的TLS、环境变量安全注入机制、Oauth 2.0等SSO系统。
•查询处理和性能 从一开始,高效率和低延迟就是Trino的核心设计目标,通过本地编译等特性,最终的性能超越了其他系统。多年来,Trino在查询分析器和规划器中增加了很多复杂的算法和功能;让连接器具备了检索和管理表统计信息的能力,创建了基于成本的优化器(CBO),并使之有利于查询处理性能的进一步改进;添加了动态过滤、动态分区修剪、谓词下推、连接下推、聚合函数下推等。每一项改进都经过了细致的调优。
•容错查询执行模式 启用此功能后,查询执行可以在集群节点故障时幸存下来。部分执行可以重试,查询处理可以继续进行。
本书共三部分。
第一部分提供了对Trino的简要介绍和使用说明,你可以从中了解到Trino的发展历史、主要功能以及如何简单地安装和使用它。
第二部分是为进阶用户准备的,介绍了Trino的内部架构、基本原理、部署、连接器和SQL语句的使用等。该部分详细地介绍了使用Trino的各种细节,是本书的精华所在。学习完该部分的知识,你应该具备正确使用和调优Trino的大部分技能。该部分也很适合作为速查手册使用。
第三部分提供了在生产环境部署Trino的必备知识,帮助你配置安全特性、与其他工具集成和进行集群部署,还提供了一些真实世界的部署案例。建议即将在生产环境中部署Trino的读者将该部分作为参考。
阅读完本书后,你不但可以编写适合Trino执行的SQL查询,熟悉Trino运维方面的各种知识,还可以对Trino的内部架构有所了解。希望本书能为对Trino感兴趣的读者提供一份好的实战指南,帮助各位读者理解Trino的方方面面。
Trino的繁荣发展离不开它的开源社区。实际上,Trino从开发伊始就将开源作为目标之一。现在,Trino已经构建了丰富的生态系统,这个系统包括数不清的开源插件和库、提供支持服务的组织和企业,以及云服务提供商等。
在国内,Trino也是非常受欢迎的分布式查询引擎,有大量的用户在实际生产环境中使用它。但在社区方面,国内的贡献者并不多,译者希望本书可以让更多的国内Trino用户熟悉并掌握它的内部架构和运行机制,了解Trino最新的开发情况和发展方向,也能让Trino的生态扩展到更多的国产数据库产品和国内云厂商的服务之中,并希望在开源社区中涌现出更多的国内贡献者。
最后,特别感谢在本书翻译和出版过程中参与审校、排版等工作的人员,他们的努力使得本书以如此完整的面貌呈现给读者。翻译过程中难免会有疏漏和不妥当之处,欢迎各位读者通过TrinoDB@foxmail.com与我们联系并加以指正。
罗卓辉 Starburst资深客户成功工程师
务志坤 金山云大数据技术专家
秦雁翔 金山云大数据工程师
王征 金山云大数据研发负责人
2023年