交互式計算引擎MOLAP篇
摘自:《大數據技術體系詳解:原理、架構與實踐》
MOLAP是一種通過預計算cube方式加速查詢的OLAP引擎,它的核心思想是“空間換時間”,典型代表包括Druid和Kylin。
一.Druid簡介
Druid是一個用於大數據實時查詢和分析的高容錯,高性能開源分布式OLADP系統,旨在快速處理大規模的數據,並能夠實現快速查詢和分析。
Durid是基於列存儲的,其設計之初主要目的是存儲時間序列數據,因此數據強制按照時間分隔不同的數據段(segment),除了時間戳以外,一個數據段中還有緯度(dimension)和度量(metric)兩種類型的列。
Durid能夠快速對數據進行過濾和聚合,它常用來給一些面向分析人員的應用提供查詢引擎。有些大規模的Druid集群每秒鍾能夠插入數十億條事件並提供上千次的查詢。
Druid官網網站:http://druid.io/。
Druid整個架構由實時線和批處理線兩部分構成,本質上是對Lamaba架構的一種實現。如上圖所示,Druid系統主要由三個外部依賴:用於分布式協調服務的zookeeper;存儲集群數據信息和相關規則的Metadata Storage;存放備份數據的Deep Stroage。
Druid節點類型比較多,可以從三個方面了解系統架構:
(1)首先,從外部看,提供查詢接口的節點是Broker節點,它根據具體的情況可能會將查詢分發到實時(Real-time)節點或歷史(Historical)節點,前者存放實時數據,后者存放歷史數據;
(2)其次,從集群內部看,負責協調數據存儲的是Coorinator節點,它讀取Metadata,通過Zookeeper通知不同的Historical節點應當載入或丟棄哪些數據段;
(3)最后,從數據Ingest來看,可以將實時數據交給Real-time節點進行處理(real-time index),也可以直接將數據建好索引存放到Deep Storage中,然后更新Metadata(batch index),現在Druid提倡用Indexing Service來統一處理兩種數據Ingest的情況。
二.Kylin簡介
Kylin是Hadoop生態圈下的一個MOLAP系統,是ebay大數據部門從2014年開始研發的支持TB到PB級別數據量的分布式OLAP分析引擎。其特點包括:
(1)可擴展的超快OLAP引擎;
(2)提供ANSI-SQL接口;
(3)交互式查詢能力;
(4)引入MOLAP Cube的概念以加速分析過程。
(5)支持JDBC/RESTful等訪問方式,與BI工具可無縫整合。
Kylin的核心思想是利用空間換時間,它通過預計算,將查詢結果預先存儲到HBase上以加快數據處理效率。
Kylin官網網站:http://kylin.apache.org/。
Kylin實現過程復用了大量開源系統,具體如上圖所示。
RESST Server:
提供一些RESTful接口,例如創建cube,構建cube,刷新cube,合並cube等cube相關操作,元數據管理,用戶訪問權限,系統配置動態修改等。
JDBC/ODBC接口:
Kylin提供了JDBC驅動,使用JDBC接口的查詢和使用RESTful接口的查詢內部實現流程是相同的。這類接口使用Kyin能夠兼容各種可視化工具,包括tableau和mondrian等。
Query引擎:
Kylin使用一個開源的calcite框架實現SQL的解析,相當於SQL引擎層。
calcite官網網站:http://calcite.apache.org/.
Routing:
該模塊負責將SQL生成的執行計划轉換成面向cube緩存的查詢。cube是通過預計算緩存在HBase中,這些查詢只需從HBase直接獲取結果返回即可,一般在妙計甚至毫秒級完成。
Metadata:
Kylin中包含大量的元數據信息,包括cube的定義,星狀模型的定義,作業的信息,作業的輸出嘻嘻,緯度的存放目錄信息等,元數據和cube都存儲在Hbase中。
Cube構建引擎:
負責預計算方式的構建cube,這是通過MapReduce/Spark計算生成HTable然后加載到HBase中完成的。
三.Druid於Kylin對比
Druid與kylin均是MOLAP類型的查詢引擎,它們將數據按照多維度數據方式存儲,並通過索引方式加速計算。它們兩個擁有很多相同特點,但也各有自己的特色,它們的異同對比如下圖所示。