一、Presto簡介
Presto是Facebook開發(fā)的數據查詢引擎,可對250PB以上的數據進行快速地交互式分析。
該項目始于 2012 年秋季開始開發(fā),該項目已經在超過 1000 名 Facebook 雇員中使用,運行超過 30000 個查詢,每日數據在 1PB 級別。Facebook 稱 Presto 的性能比Hive要好上 10 倍有多。2013年Facebook正式宣布開源 Presto。
二、Presto 執(zhí)行查詢過程
Presto查詢引擎是一個Master-Slave的架構,由一個Coordinator節(jié)點,一個Discovery Server節(jié)點,多個Worker節(jié)點組成,Discovery Server通常內嵌于Coordinator節(jié)點中。Coordinator負責解析SQL語句,生成執(zhí)行計劃,分發(fā)執(zhí)行任務給Worker節(jié)點執(zhí)行。Worker節(jié)點負責實際執(zhí)行查詢任務。Worker節(jié)點啟動后向Discovery Server服務注冊,Coordinator從Discovery Server獲得可以正常工作的Worker節(jié)點。如果配置了Hive Connector,需要配置一個Hive MetaStore服務為Presto提供Hive元信息,Worker節(jié)點與HDFS交互讀取數據。
1. Client 發(fā)送請求給 Coordinator。
2. SQL 語句通過 ANTLR 進行解析生成 AST。
3. AST 通過元數據進行語義解析。
4. 語義解析后的數據生成邏輯執(zhí)行計劃,并且通過規(guī)則進行優(yōu)化。
5. 切分邏輯執(zhí)行計劃為不同 Stage,并調度 Worker 節(jié)點去生成 Task。
6. Task 生成相應物理執(zhí)行計劃。
7. 調度完后根據調度結果 Coordinator 將 Stage 串聯(lián)起來。
8. Worker 執(zhí)行相應的物理執(zhí)行計劃。
9. Client 不斷地向 Coordinator 拉取查詢結果,Coordinator 從最終匯聚輸出的 Worker 節(jié)點拉取查詢結果。
專欄
HBase快速入門和項目開發(fā)實踐
作者:軟件架構
9.9幣
5人已購
查看
三、Presto 為何高性能?
* Pipeline, 全內存計算。
* SQL 查詢計劃規(guī)則優(yōu)化。
* 動態(tài)代碼生成技術。
* 數據調度本地化,注重內存開銷效率,優(yōu)化數據結構,Cache,非精確查詢等其它技術。