來源:北大青鳥總部 2023年08月15日 08:53
大數據時代對數據的處理分析提出了很多需求,企業用戶希望能從業務數據生成報表、進行運營分析、進行實時推薦計算。因此,在大數據處理分析領域出現了很多工具,列式數據庫Clickhouse、Hbase提供了存儲和分析能力,Hadoop家族中的MapReduce、HDFS提供了離線計算能力,Hive以數據倉庫的形態提供了簡單易學的分析能力,實時計算引擎Flink更是提供了流批處理計算能力,可謂是各有千秋啊!不過工具千千萬,唯有適合自己的才是最好的,今天我們要介紹的便是Presto
Presto是Facebook公司開源的分布式SQL查詢引擎,支持PB級別的數據計算,之所以在眾多分析引擎中選擇它,主要是因為它是一個能夠獨立運行、不依賴其他外部系統;此外簡單的數據結構使得大部分數據的接入很容易;最后豐富的插件接口可以對接很多數據源系統。基于內存計算的模式、基于流水線設計邊運行邊出結果的運行模式也使得Presto很快就能獲取處理數據。綜上原因,諸如阿里、美團等互聯網巨頭在數據分析中也使用Presto做底層引擎。
Presto的架構如下所示,它包含Client、DiscoveryService、Coordinator、Worker、Connector五大部分。Client包含presto自帶的客戶端、通過API調用的JDBC客戶端;DiscoveryService是一個注冊中心,所有的Worker節點都向其進行注冊,Coordinator從其獲取worker節點,有點類似微服務架構中的“生產者-注冊中心-消費者”之間的關系;Worker負責從Connector獲取數據,執行數據分析任務;Connector負責獲取數據源信息,可以接收來自文件系統如HDFS的數據,也可以接收數據庫如Mysql、Clickhouse的數據,甚至是消息隊列如Kafka中的數據。

那么在Presto中如何執行一個SQL查詢任務呢?簡單來說,大概是這樣的:用戶在客戶端發出一個SQL查詢請求,Coordinator接受來自客戶端的請求,并對該SQL語句進行解析,生成查詢計劃,按查詢計劃依次生成SQLQueryExecution—》SQLStageExecution—〉HTTPRemotePlan,把最后的Plan任務分配給到Worker節點;Worker節點根據任務內容從Connector中獲取數據,執行計算,計算完畢后把結果給到Coordinator,Coordinator獲取結果把結果寫入緩存,客戶端不斷輪詢Coordinator中的查詢結果,一次任務執行完畢,把數據給用戶展示出來。
介紹完Presto如何執行一個SQL任務后,我們再來看看它的數據結構和存儲模型。在Presto中的數據結構是三層模型,Catalog-》Schema-〉Table,Catalog對應一個數據源,Schema對應數據源中的數據庫,Table對應數據庫中的表。在Presto的存儲模型中包含Page-》Block,Page是多行數據的集合(每一行又包含多個列的數據),也是Presto計算處理的最小數據單元,Block是具體的一列數據。清晰了Presto的數據結構和存儲模型,在接入Presto時就比較清晰了。
Presto處理速度快,除了Worker節點基于內存進行運算處理之外,在Worker節點內部、Worker節點之間都是采用流水線模型進行計算。這給用戶造成的感覺就是很快,剛輸入就有結果了,先看前面的結果再看后面的結果。
同樣是數據處理分析引擎,處理速度的差別卻是各不相同,這主要和使用工具的架構及運行原理有關系。早期Facebook是使用Hive做數據分析處理,后來因為實在太慢了,所以才自己開發寫了Presto,據說同樣的一個SQL查詢任務,在Hive中需要差不多一分鐘,但Presto人中卻不到1秒,那今天我們也感受一波Facebook公司的數據分析處理歷史吧。
關于Hive,它是基于Hadoop的數據倉庫工具,使用Hive也可以進行數據查詢分析處理,我們一起來看看Hive中又是如何運轉的呢?在Hive中,所有的HQL語句轉化成數據查詢任務,所有的數據在進行處理前會劃分成大小相同的數據,經過Map模型初次處理數據,得到中間結果,再經過Reduce模型二次處理中間結果數據,最后得到分析數據,存儲在HDFS。在該模型中,所有的數據分析處理需要經過多次轉換成中間結果,比較慢;其次在MR模型中所生成的中間數據都是存儲在磁盤中的,每次數據進入磁盤,再從磁盤讀取出來,非常的耗費IO,時間延遲太長了。

介紹完Presto后,我們再回歸現實,了解下互聯網現況。互聯網、移動互聯網、物聯網、5G、人工智能、云計算等技術的不斷發展,越來越多數據的產生,企業精細化運營的要求,在催生了大量的數據處理分析工具之時,也催生了諸如數據倉庫、數據集市、數據湖、數據中臺等業態,不斷的在給大數據領域輸送力量,對于數據分析人才的訴求也一直有增無減,后浪們,我們一起加油吧!