交互式計算引擎常見的開源實現
摘自:《大數據技術體系詳解:原理、架構與實踐》
交互式處理(Interactive Processing)是操作人員和系統之間存在交互作用的信息處理方式。操作人員通過終端設備(如輸入輸出系統)輸入信息和操作命令,系統接到后立即處理,並通過終端設備顯示處理結果。在大數據領域中,交互式計算(處理)引擎是針對大數據具備交互式分析能力的分布式計算引擎,它通常用於OLAP(Online Analytical Processing,聯機分析處理)場景。相比於批處理引擎(MapReduce或Hive),它對數據處理性能要求更高。
為了實現高性能數據處理,交互式計算引擎通常采用(Massively Parallel Processing)架構,並充分使用內存加速。為了方便數據分析人員表達自己的查詢意圖,交互式計算引擎通常支持SQL或JSON等查詢語言。當前比較主流的交互式計算引擎包括ROLAP(Relational OLAP)類型的SQL查詢引擎Impala和Presto,MOLADP(Multidimenisional OLAP)類型的OLAP查詢引擎Druid和Kylin等。
Impala官網:http://impala.apache.org/.
Presto官網:https://prestodb.github.io/.
Druid官網:http://druid.io/.
Kylin官網:http://kylin.apache.org/.
一.交互式計算引擎產生背景
在開源大數據領域,交互式引擎並不是從一開始就出現的。起初,大數據領域數據處理引擎以MapReduce為主,但MapReduce引擎采用了批處理設計理念,數據處理性能低下:
IO密集型:
Map階段中間結果寫磁盤,Reduce階段寫HDFS,多個MapReduce作業之間通過共享存儲系統(HDFS)交換數據。
任務調度和啟動開銷大:
大量任務需要分布式調度到各個節點上,且每個任務需啟動一個Java虛擬機運行。
無法充分利用內存:
MapReduce是十多年前提出的分布式技術,當時內存價格昂貴,所以設計理念充分使用磁盤,而如今內存的價格越來越便宜,新行計算引擎可嘗試通過內存加速。
Map端和Reduce段均需要排序:
這是MapReduce設計理念決定的,使得MapReuce無法很好地應對交互式處理場景。
為了克服MapReduce地性能缺陷,Google提出了新型交互式計算引擎Dremel,它構建於Googel地GFS(Google File System)等系統之上,支撐了Google地數據分析服務BigQuery等諸多服務。Dremel的技術亮點主要有兩個:一個是采用了MPP架構,使用了多層查詢樹,使得任務可以在數千個節點上並行窒息感和聚合結果;二是實現了嵌套數據的列式存儲 ,避免讀取不必要的數據,大大減少網絡和磁盤IO。
受Google Dremel的啟發,Cloudera等公司開發了Impala,Facebook開發了Presto並將之開源。
二.交互式查詢引擎分類
交互式計算引擎是具備交互式分析能力的分布式大數據計算引擎,它常用於OLAP場景。OLAP有很多實現方法,根據存儲數據的方式不同可以分為ROLAP,MOLAP,HOLAP等。
(1)ROLAP
基於關系型數據庫的OLAP實現(Relational OLAP)。它以關系型數據庫為核心,以關系型結構進行多維度的表示和存儲。它將多維結構划分為兩類表:一類是事實表,用來存儲數據和緯度關鍵字;另一類是緯度表,即對每個緯度至少使用一個表來存放緯度層次,成員類別等緯度描述信息。
ROLAP的最大好處是可以實時的從源數據中獲取最新數據更新,以保持數據實施性,缺點在於運算效率比較低,用戶等待響應時間比較長。
(2)MOLAD
基於多維度的OLAP實現(Multidimensional OLAP)。它以多位數據組織方式為核心,使用多緯數據存儲數據。多維數組在存儲系統中形成“數據立方體(Cube)”的結構,此結構是經過高度優化的,可以最大程度地提高查詢能力。
MOLAP的優勢在於借助數據多緯預處理顯著提高運算效率,主要額缺陷在於占用存儲空間和數據更新有一定延滯。
(3)HOLAP
基於混合組織的OLAP實現(Hybrid OLAP),用戶可以根據自己的業務需求,選擇哪些模型采用ROLAP,哪些采用MOLAP。一般來說,將不常用或需要靈活定位的分析使用ROLAP方式,而常用,常規模型采用MOLAP實現。
Impala和Presto可用於ROLAP場景,而Druid和Kylin常用於MOLAP場景。也有人將Druid規划到“HOLAP”范疇,因為它不會進行預計算,因此是一種“ROLAP”,但同時它此用了列式存儲,且為非關系型模型,因此也是一種“MOLAP”。
三.常見的開源實現
在大數據生態圈中,主流的應用於ROLAP場景的交互式計算引擎包括Impala和Prosto,它們的特點如下:
(1)Hadoop native:
跟Hadoop生態系統有完好的結合,包括:
可直接在Hive Metastore對接,處理Hive中的表。
可直接處理存儲在HDFS和HBase中的數據。
(2)計算與存儲分析:
它們僅僅是查詢引擎,不提供數據存儲服務,所有要處理的數據都存儲在第三方系統中,比如Hive,HDFS和HBase等。
(3)MPP架構
采用經典的MPP架構,具有較好的擴展性,能夠對應TB甚至PB級別數據的交互式查詢需求。
(4)嵌套式數據存儲:
支持常見的列式存儲格式,比如ORC(僅Presto支持)和Parquet(Impala和Presto均支持)。
主流的應用於MOLAP場景的交互式計算引擎包括Druid和Kylin,它們的特點如下:
(1)數據建模:
將數據分為緯度和度量兩類,且所有查詢必須針對以上兩類列進行。
(2)數據預計算:
為了提高數據查詢效率,MOLAP引擎一般會根據緯度和度量列,預先生成計算結果。
四.博主推薦閱讀
鏈接一:交互式計算引擎ROLAP篇(https://www.cnblogs.com/yinzhengjie/p/10859658.html)
鏈接二:交互式計算引擎MOLAP篇(https://www.cnblogs.com/yinzhengjie/p/10865368.html)