連城
摘 要:隨著業務的不斷發展,人們已不滿足于大數據技術提供的海量存儲與離線分析能力,希望能支持聯機分析處理(OLAP)場景。然而在海量數據條件下,對OLAP緯度、指標數量、查詢的并發度及響應時間都有較高的要求。傳統的RMDBS或SQL on Hadoop能力有限,不能有效支撐。以Druid和Kylin為代表的預聚合技術的出現,在較大程度上滿足了大數據OLAP場景的需求。文章在簡述OLAP技術發展的基礎上,分析這類預聚合技術的系統特點及應用場景。
關鍵詞:大數據;OLAP;預聚合;應用場景
近年來,開源大數據技術逐漸占領了數據分析的市場。Hadoop生態圈的分布式文件系統(Hadoop Distributed File System,HDFS)和HBase作為主流的海量數據存儲、Hive作為主流SQL數據分析引擎,逐步蠶食傳統分析型關系數據庫的市場。為解決MapReduce低效問題,出現了以內存為中心的計算引擎配合Hadoop的方式,諸如SparkSQL,Impala,Presto等SQL on Hadoop。它們的出現使得數據分析擺脫了對傳統關系型數據庫的依賴,一次分析數據量也增加到TB或PB級,支持任意緯度和指標。但是響應時間上就從秒到分鐘不等,量大會到小時。為了滿足大數據聯機分析處理(On-Line Analytical Processing,OLAP)場景的需求,出現了以Druid和Kylin為代表的預聚合技術。通過對其系統特點的分析,借鑒解決大量聚合后結果存放,查詢的并發度高、響應時間短,預聚合時效性高等一系列大數據OLAP問題的思路。通過對其應用場景的探討,可為將來引入該類技術提供參考。
1 OLAP技術發展簡史
OLAP是共享多維信息的、針對特定問題的聯機數據訪問和分析的快速軟件技術。按照其實現方式不同,可以分為ROLAP(Relational)、MOLAP(Multidimensional)和HOLAP(Hybrid)3種類型。其中,ROLAP采用關系表存儲維信息和事實數據;MOLAP則采用多維數據結構存儲維信息和事實數據;而HOLAP稱其為混合OLAP,該方法結合了ROLAP和MOLAP技術。無論是何種OLAP,都需要存儲和計算平臺的支持[1]。
1.1 傳統RMDBS技術
諸如Oracle,DB2,MySQL,Postgresql等傳統RMDBS(關系型數據庫系統)技術,都是使用關系表存儲維信息和事實數據,屬于ROLAP類型。傳統關系型數據庫一般同時具備存儲和計算能力,相對于大數據計算與存儲分離,是一種緊湊的架構。數據量級方面一般小于百(千)萬行級;緯度和指標數量一般小于10個;查詢響應時間一般是毫秒到秒,量大會到分鐘。當然上述條件會因為數據庫配置及自身特性有所不同,比如DB2這種分布式能力較強的分析類關系數據庫,其OLAP分析條件會更好。
1.2 并行計算SQL on Hadoop技術
大數據處理方式簡單來說就是:計算+存儲。諸如Hive,SparkSQL,Impala,Presto等都是基于Hadoop存儲(準確來說應是HDFS)之上的計算引擎。從基于磁盤的MapReduce到基于內存的Spark,以及類似MPP架構的Impala和Presto。每次新型計算引擎的出現,在保證高擴展性、并行計算能力為前提,不斷縮短查詢響應時間、提高并發度。數據量級方面一般介于百(千)萬行級和億行級之間;緯度和指標數量一般無限制;查詢響應時間一般是秒到分鐘,量大會到小時。當然上述條件會因為Hadoop集群規模配置及引擎特性有所不同。SQL on Hadoop本質上還是使用關系表存儲維信息和事實數據,屬于ROLAP類型。
1.3 預聚合OLAP on Hadoop技術
SQL on Hadoop以ROLAP的方式支持聯機分析處理,在縮短查詢響應時間、提高并發度方面已近極限。為了在大數據環境下,支持更快查詢響應和并發度,方法就是基于多維數據構建Cube模型,通過大量的預聚集計算,實現生成支持多維分析的Cube,并在此基礎上支持以下鉆、上卷、切片、切塊、旋轉等操作的MOLAP。其優點就是通過數據的深加工(預聚集計算、索引、壓縮、緩存等),換取高的OLAP性能;缺點是數據預處理環節多,處理周期長,數據維度不宜過高,數據冗余多[2]。以Druid和Kylin為代表的預聚合技術,均屬于MOLAP類型,也被稱作OLAP on Hadoop。數據量級方面一般介于億行級和百(千)億行級之間;緯度數量建議小等于15個;指標數量一般無限制;查詢響應時間一般是毫秒到秒。
2 系統特點分析
目前開源MOLAP多維數據分析工具,包括Kylin,Druid,Pinot等。其中Kylin和Druid是使用比較廣泛的OLAP on Hadoop。
2.1 實時多維分析OLAP引擎—Kylin
Kylin全稱叫作Apache Kylin,是Apache開源軟件基金會里的頂級項目,用了Hadoop生態圈里面多個組件。通過Hive批量、Kafka實時導入數據,預計算支持MapReduce,Spark,Streaming方式。當整個計算結束之后,所有的分析應用、查詢應用、挖掘應用會像數據庫一樣,通過標準的SQL訪問。Kylin系統會非常精準地知道查詢結果在哪里,馬上可以把這個結果反饋。這點是通過其構建的Cube立方體,將某個條件(作為Key)的結果(作為Value)放在HBase中。Kylin的查詢引擎會將SQL條件翻譯為對應Cube的頂點(HBase的Key)并取得結果返回。由于Kylin使用HBase存儲預聚合結果,在查詢時間和并發度上都有很好的表現。
Kylin主要特點如下:標準的SQL接口;支持超大數據集;亞秒級響應;可伸縮性和高吞吐率;BI及可視化工具集成[3]。
Kylin必須預先定義模型用于描述Cube,由于是預計算模型內所有緯度的組合,作為key并存儲到HBase這類快速存儲。如果模型緯度太多則存儲膨脹度相當恐怖。
2.2 實時探索查詢OLAP引擎—Druid
Druid是一個開源、分布式的列存儲,適用于實時數據分析的存儲系統,能夠快速聚合、靈活過濾、毫秒級查詢和低延遲數據導入。最初由美國廣告技術公司MetaMarkets開源,后作者獨立Imply.io公司商業運作,其設計的適用場景是對PB級數據的快速聚合查詢[4]。為了做到毫秒級的查詢響應,Druid的核心思想是對數據的索引和預聚合,并載入內存快速查詢。為了支持實時分析,在預聚合模型方面僅支持時序模型,數據是不可變的。Druid集群采用無共享的架構,同時依賴Zookeeper,MetadataStore(一個關系型數據庫),Deep Storage(HDFS等文件系統)3個外部服務。
Druid具有如下技術特點:數據吞吐量大;支持流式數據攝入和實時;查詢靈活且快。然而,Druid對SQL的支持不友好,而且不支持Join,僅提供了一個Lookup功能,滿足維表的星型關聯。
3 應用場景
Druid和Kylin都是使用預聚合技術,以空間換時間。不同的是Druid預計算最大維度組合,然后通過對維度做索引。當查詢請求來的時候,再后發地根據剛才做的緯度索引,定位到最細粒度的數據,然后把這些數據撈出來。優點是索引帶來額外的空間可控(估計要50%以上,但比Kylin要小)且算法統一,不用預建模型。缺點就是撈出來的數據默認是近似值,目前只能在有限范圍內(可配置)精確查詢,代價就是耗資源。Kylin是預計算模型內所有緯度的組合,業務必須能被預先定義為Cube模型,且模型緯度不能太多。但優點是支持排重,精確度有保證。
簡單來說,Kylin更適合有15個左右固定的分析維度,特別是有Join的復雜場景,比如:銷售、市場、管理等商務報表,預算決算,經濟報表等;Druid適合時序類實時分析場景,比如:廣告點擊、運維監控、安全事件等數據分析。
4 結語
如果數據量級巨大又對查詢響應時間有秒級要求,就要結合場景考慮使用Druid或Kylin這種MOLAP類型的大數據預聚合技術。通過在數據接入的時候,根據指定預聚合的指標進行聚合運算,并使用快速存儲保存聚合結果,以滿足大數據OLAP查詢需求。數據在聚合的過程中會丟失指標對應的列值信息,可結合ROLAP類型的并行計算SQL on Hadoop技術解決。可以預見大數據HOLAP類型會將明細數據以ROLAP的形式存放,更加方便靈活,而高度聚合的數據以MOLAP的形式展現,更適合于高效的分析處理。相信大數據預聚合OLAP技術作為大數據解決方案中重要的組成部分,將發揮更大的作用。
[參考文獻]
[1]宋杰,郭朝鵬,王智,等.大數據分析的分布式MOLAP 技術[J].軟件學報,2014(4):731-752.
[2]杜小勇,陳躍國,覃雄派.大數據與OLAP系統[J].大數據,2015(1):48-60.
[3]Apache Kylin核心團隊.Apache Kylin權威指南[M].北京:機械工業出版社,2017.
[4]歐陽辰,劉麒贇,張海雷,等.Druid實時大數據分析原理與實踐[M].北京:電子工業出版社,2017.