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 從數據庫中讀取數據並進行計算)。滿足該業務場景的解決方案如下圖:

 

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