多源数据即席查询 Trino(Presto) 引擎剖析
一、起源
首先来简述一下 Presto 的发展起源,Presto 其实是由 FaceBook 开源的一个 MPP 计算引擎,主要用来以解决 Facebook 海量 Hadoop 数据仓库的低延迟交互分析问题,Facebook 版本的 Presto 更多的是以解决企业内部需求功能为主,也叫 Presto DB,版本号以 0.xxx 来划分。后来,Presto 其中的几个人出来创建了更通用的 Presto 分支,取名 Presto SQL,版本号以 xxx 来划分,例如 345 版本,这个开源版本也是更为被大家通用的版本。前一段时间,为了更好的与 Facebook 的 Presto 进行区分,Presto SQL 将名字改为 Trino,除了名字改变了其他都没变。所以我们以后慢慢接受 Trino 这个引擎吧~(后面统一用 Trino 吧)
二、特点及原理
Trino 这个查询引擎之前在大数据查询一章中讲到过,那时候还叫他 Presto,这个查询引擎的特点正如文章标题描述的这样,多源、即席。多源就是它可以支持跨不同数据源的联邦查询,即席即实时计算,将要做的查询任务实时拉取到本地进行现场计算,然后返回计算结果。
那么 Trino 是如何支持这两个特点的呢,我们首先来看一下他的架构:
整个 Trino 主要是由 Client、Coordinator、Worker 以及 Connector 来构成。
Client 就是来接受客户端查询请求的;Coordinator 来对接受到的查询进行词法、语法分析,然后进行任务和资源的调度;接下来就是实际执行任务的 Worker 来做具体的工作了,例如去数据源拉取数据,然后进行计算;那 Connector 就是 Worker 去数据源拉取数据的连接器(适配器/管道)。
通过 Trino 的架构我们就可以看出来为什么 Trino 可以支持多源数据的查询了,因为引擎本身是通过 Connector 与数据源进行交互的,Trino 提供了一套自定义数据源的统一接口,也就是说,无论我们想要连接什么数据源,我们只需要按照规范开发对应的数据源接口即可,其实开发起来也不是很麻烦,我前几节就带大家看了如何开发一个基于 http 协议的文本文件数据源 Connector。
那么即席查询又是如何做到的呢,Trino 是一个基于内存的 MPP 计算引擎,通过并行+内存的计算方式,可以大大提高计算速度,再加上一些优化(例如剪枝、谓词下推等),就可以达到大数据量计算任务下的秒级响应。
三、应用与意义
普通联邦查询
Presto(Trino)统一联邦查询
上图能够非常形象等展示出 Trino 这种多源数据即席查询引擎的优点:
(1)屏蔽底层数据源,提供统一的查询接口:通过统一的 SQL 查询,你可以查询结构化的数据库(例如 Oracle、MySql 等)、非结构化数据库(Neo4j、MongoDB)、Hive/HDFS、Kafka 以及 Terradata、GreemPlum 等等;
(2)提高效率:一方面,基于内存计算,查询速度快是其一个特点;另一方面,由于它可以跨不同的数据源拉取数据并进行连接、聚合等操作,这也减少了数据搬家、数据迁移等步骤,从整个的计算逻辑上来看也是大大加快了;
(3)提高数据治理能力:在大数据时代,提高数据治理能力、发挥数据价值是重中之重,通过 Trino 可以很方便的进行异构数据的提取、整合与分析,对于打破数据孤岛、提高数据治理能力至关重要。
四、总结
以上是对 Trino 计算引擎进行了特点的剖析与安利,后面我会从部署到应用再到深入理解内部机制为大家来继续分享~
评论