1. 程式人生 > >分散式大資料sql查詢引擎Presto初識

分散式大資料sql查詢引擎Presto初識

1、背景:

Hive使用MapReduce作為底層計算框架,是專為批處理設計的。但隨著資料越來越多,使用Hive進行一個簡單的資料查詢可能要花費幾分到幾小時,顯然不能滿足互動式查詢的需求。Presto是一個分散式SQL查詢引擎,它被設計為用來專門進行高速、實時的資料分析。它支援標準的ANSI SQL,包括複雜查詢、聚合(aggregation)、連線(join)和視窗函式(window functions)。

這其中有兩點就值得探究,首先是架構,其次自然是怎麼做到低延遲來支援及時互動。

2、Presto架構


Presto查詢引擎是一個Master-Slave的架構,由一個Coordinator節點,一個Discovery Server節點,多個Worker節點組成,Discovery Server通常內嵌於Coordinator節點中。Coordinator負責解析SQL語句,生成執行計劃,分發執行任務給Worker節點執行。Worker節點負責實際執行查詢任務。Worker節點啟動後向Discovery Server服務註冊,Coordinator從Discovery Server獲得可以正常工作的Worker節點。如果配置了Hive Connector,需要配置一個Hive MetaStore服務為Presto提供Hive元資訊,Worker節點與HDFS互動讀取資料。


3、Presto即時查詢原理

Presto的執行模型和Hive或MapReduce有著本質的區別。Hive將查詢翻譯成多階段的MapReduce任務,一個接著一個地執行;每一個任務從磁碟上讀取輸入資料並且將中間結果輸出到磁碟上。

Presto引擎沒有使用MapReduce,而是使用一個定製的查詢執行引擎來響應支援SQL語法。除了改進的排程演算法之外,所有的資料處理都是在記憶體中進行的;不同的處理端通過網路組成處理的流水線;避免不必要的磁碟讀寫和額外的延遲。這種流水線式的執行模型會在同一時間執行多個數據處理段,一旦資料可用的時候就會將資料從一個處理段傳入到下一個處理段,大大的減少各種查詢的端到端響應時間。特點如下:

1)完全基於記憶體的平行計算

2)流水線

3)本地化計算

4)動態編譯執行計劃

5)小心使用記憶體和資料結構

6)類BlinkDB的近似查詢

7)GC控制

4、Presto執行查詢過程

參考:http://tech.meituan.com/presto.html

5、Presto安裝部署

參考:http://prestodb-china.com/docs/current/installation.html