Presto入门(含和Hive对比)

一、简介

Presto是由Facebook开发的,是一个运行在多台服务器上的分布式查询引擎,本身并不存储数据,但是可以接入多种数据源(Hive、Oracle、MySql、Kafka、Redis等),并且支持跨数据源的级联查询,比如:
select * from a join b where a.id=b.id;,其中表a可以来自Hive,表b可以来自Mysql。

Presto 分为 server 和 client。

server
启动服务:/安装path/bin/launcher start
停止服务:/安装path/bin/launcher stop

client
进入命令行交互模式:
./presto-cli --server 服务的ip:端口

基础概念:

catalogs -> 配置的数据仓库名称,不同的数据连接
schemas -> 数据库 database
tables -> 表 tables

二、安装及结构

完整安装包括一个coordinator和多个worker。 由客户端提交查询,从Presto命令行CLI提交到coordinator。 coordinator进行解析,分析并执行查询计划,然后分发处理队列到worker。
查询原理:完全基于内存的并行计算;流水线;本地化计算;动态编译执行。

由于 Presto 的数据源具有完全解耦、高性能,以及对 ANSI SQL 的支持等特性(包括联合查询、左右联接、子查询以及一些聚合和计算函数),使得 Presto 在 ETL、实时数据计算、 Ad-Hoc 查询和实时数据流分析等多个业务场景中均能发挥重要的作用。
由于 Presto 卓越的性能表现,使得 Presto 可以弥补 Hive 无法满足的实时计算空白,因此可以将 Presto 与 Hive 配合使用:对于海量数据的批处理和计算由 Hive 来完成;对于大量数据(单次计算扫描数据量级在 GB 到 TB)的计算由 Presto 完成。

三、 常用业务场景

1、基于 T+1 数据的实时计算 
在这种业务场景中,用户并不要求基准数据的实时更新,但是要求每次查询数据都能够快速响应。需要 Presto 和 Hive 配合使用来满足实际的业务需求。每天凌晨通过azkaban 调度 Hive 脚本,根据前一天的数据计算生成中间结果表,生成完毕之后使用 Presto 查询中间结果表,得出用户最终所需要的数据。满足该业务场景的解决方案如下图:

2、基于 RDBMS 的实时计算 
在这种业务场景中,用户要求查询的数据完全实时,即只要业务库中的数据发生改变,通过 Presto 查询的时候,就可以查询到刚刚改变之后的数据。要达到这个效果,我们需要使用合理的机制保证数据实时同步,因此我们使用数据库复制技术,为线上的业务数据库建立实时同步的从库,然后用 Presto 查询数据库中的数据,进而进行计算(请注意:使用官方的 Presto 直接读取数据库的性能还太低,因此建议使用JD-Presto 中的 PDBO 从数据库中读取数据并进行计算)。满足该业务场景的解决方案如下图:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章