基于大數(shù)據(jù)的OLAP技術(shù),四個角度一篇講明白
在線分析處理(Online Analytical Processing,OLAP)技術(shù)是大數(shù)據(jù)技術(shù)中快速解決多維分析問題的方法之一。由于OLAP需要快速讀取大量數(shù)據(jù),因此它對數(shù)據(jù)的讀取吞吐量和計算效率有很高的要求。目前,基于大數(shù)據(jù)的OLAP技術(shù)一般從面向讀的存儲優(yōu)化、預(yù)計算、支持靈活分析等方面不斷提高,近幾年出現(xiàn)了很多令人激動的產(chǎn)品。
一、OLAP技術(shù)介紹
OLAP技術(shù)讓用戶能夠從多個角度交互地分析多維數(shù)據(jù),從中發(fā)現(xiàn)規(guī)律,用來做決策支持。在分析過程中,用戶需要獲取和處理歷史數(shù)據(jù)(一段時期內(nèi)),有時也需要獲取和處理實時數(shù)據(jù),此時查詢吞吐量和相應(yīng)時間是關(guān)鍵性能指標。
1.OLAP分析操作
OLAP分析一般需要設(shè)計數(shù)據(jù)立方體,立方體由分析的維度(dimension)、層級(level)和指標(metric)來定義,支持上卷(roll-up)、鉆?。╠rill-down)、切片(slicing)和切塊(dicing)等分析操作。
- 上卷:將數(shù)據(jù)按一個或多個維度向更高層級聚合,例如基于縣級銷售額統(tǒng)計市級銷售額。
- 鉆取:上卷的反向操作。
- 切片和切塊:從OLAP多維數(shù)據(jù)集中按選擇維度的特定數(shù)值選取出一組特定的數(shù)據(jù),例如一季度的所有數(shù)據(jù)。
- 切塊:從OLAP多維數(shù)據(jù)集中按選擇維度的特定數(shù)值區(qū)間選取出一組特定的數(shù)據(jù),例如2月到5月的所有數(shù)據(jù)。
2.與OLTP的區(qū)別
與OLAP相對的是OLTP。OLTP的全稱是聯(lián)機事務(wù)處理(Online Transaction Processing),是傳統(tǒng)關(guān)系型數(shù)據(jù)庫的主要應(yīng)用。OLTP的特點是實現(xiàn)插入、更新、刪除等事務(wù)的在線處理,但系統(tǒng)需要保證事務(wù)的完整性,滿足ACID原則。在OLTP中,事務(wù)的吞吐量是關(guān)鍵性能指標,以每秒事務(wù)數(shù)來衡量效率。
由于嚴格的約束限制,支持OLTP的數(shù)據(jù)系統(tǒng)通常無法滿足OLAP大規(guī)模數(shù)據(jù)讀取與處理的需求,二者對數(shù)據(jù)讀取的吞吐量要求相差不止一個量級,因此OLAP系統(tǒng)的技術(shù)選型一般與OLTP不同,數(shù)據(jù)的組織方式也不同。
二、實時OLAP系統(tǒng)的兩種架構(gòu)模型
隨著DT時代的到來,越來越多的業(yè)務(wù)需求要求大數(shù)據(jù)系統(tǒng)既能處理歷史數(shù)據(jù),又能進行實時計算,同時越來越要求運營的時效性,以便即時評估運營活動效果,即時調(diào)整策略。針對實時大數(shù)據(jù)統(tǒng)計分析系統(tǒng),有兩種架構(gòu)設(shè)計路線:Lambda和Kappa。
- Lambda架構(gòu)包含三層:批處理層(Batch Layer)、速度層(Speed Layer)和服務(wù)層(Serving Layer)。批處理層對歷史數(shù)據(jù)進行預(yù)處理,速度層處理新增實時數(shù)據(jù),服務(wù)層實現(xiàn)上述兩層處理結(jié)果的融合,將其合并為統(tǒng)一視圖,為用戶提供全時域數(shù)據(jù)分析查詢。每層可以分別選擇合適的大數(shù)據(jù)組件來構(gòu)建系統(tǒng),比如用Spark構(gòu)建批處理層、用Flink構(gòu)建速度層。
- Kappa架構(gòu)在Lambda架構(gòu)的基礎(chǔ)上去掉了批處理層,對速度層進行了改進,使其既能夠支持實時數(shù)據(jù)處理,又能夠支持歷史數(shù)據(jù)處理。Kappa架構(gòu)只有實時層和服務(wù)層。Kappa架構(gòu)通常是將流式框架中的數(shù)據(jù)通道替換成消息隊列(如Kafka),可以設(shè)定一定的保留期限,如分析邏輯改變,重新從消息隊列消費數(shù)據(jù)處理即可。
實時OLAP系統(tǒng)的兩種架構(gòu)模型對比如圖1所示。

▲圖1 實時OLAP的兩種架構(gòu)模型對比
兩種架構(gòu)模型的優(yōu)缺點對比如下:
- Lambda架構(gòu)具有很好的靈活性、可擴展性和容錯性,但分別處理歷史數(shù)據(jù)與實時數(shù)據(jù)時常常出現(xiàn)處理邏輯或計算結(jié)果不一致的情況,另外系統(tǒng)建設(shè)和維護復(fù)雜。
- Kappa架構(gòu)只需維護一套代碼,可以做到數(shù)據(jù)處理邏輯與計算結(jié)果的一致性。Kappa架構(gòu)并不是Lambda架構(gòu)的替代品,二者的應(yīng)用場景不同。Kappa架構(gòu)由于全部采用流式處理,數(shù)據(jù)處理吞吐量不如Lambda架構(gòu),處理資源成本也較高。
三、OLAP相關(guān)技術(shù)分類
按照數(shù)據(jù)模型可將OLAP相關(guān)技術(shù)分為MOLAP、ROLAP和HOLAP 3種類型:
- MOLAP表示Multidimensional OLAP(多維型OLAP),一般是基于預(yù)計算生成多維數(shù)據(jù)立方體;
- ROLAP是指Relational OLAP(關(guān)系型OLAP),一般不進行預(yù)計算,直接關(guān)聯(lián)事實表與維度表進行查詢;
- HOLAP是指Hybrid OLAP(混合型OLAP),是混合利用MOLAP和ROLAP方法,綜合二者的優(yōu)缺點。
按照實現(xiàn)的技術(shù)方法可將OLAP相關(guān)技術(shù)分為MPP架構(gòu)、預(yù)計算和搜索引擎三類。
- MPP架構(gòu):最常見的OLAP引擎架構(gòu),MPP架構(gòu)具有完全的可伸縮性、高可用、高性能、高性價比等優(yōu)勢。此類又分兩種,一種是MPP數(shù)據(jù)庫,它基于關(guān)系數(shù)據(jù)模型建立數(shù)據(jù)倉庫的主要技術(shù)選型,是大數(shù)據(jù)場景ROLAP的實現(xiàn)方法,典型的產(chǎn)品是Greenplum、ClickHouse;另一種是MPP分析引擎,它僅基于MPP架構(gòu)實現(xiàn)計算功能,數(shù)據(jù)存儲則依賴于其他存儲系統(tǒng)(如HDFS),典型的產(chǎn)品有Presto、Impala。
- 預(yù)計算:基于定義的數(shù)據(jù)立方體,在明細表上進行預(yù)計算,在多維分析時僅執(zhí)行查詢操作,是實現(xiàn)MOLAP的典型方法。優(yōu)點是查詢時如果命中預(yù)計算結(jié)果則幾乎沒有延遲,適合對超大原始數(shù)據(jù)集的分析,可實現(xiàn)秒級響應(yīng);缺點是預(yù)計算量大、不靈活、支持維度有限(否則存在維度災(zāi)難)、查詢延遲時間不穩(wěn)定(取決于是否命中預(yù)計算結(jié)果)。典型的產(chǎn)品如Apache Kylin,也有產(chǎn)品通過控制預(yù)計算的程度以避免預(yù)計算量太大,如Druid。
- 搜索引擎:在入庫時將數(shù)據(jù)轉(zhuǎn)換為倒排索引,在搜索類查詢上能做到亞秒級響應(yīng),但是對于掃描聚合為主的查詢,隨著處理數(shù)據(jù)量的增加,響應(yīng)時間也會退化到分鐘級。另外,搜索引擎對存儲消耗很大。典型的產(chǎn)品如Elasticsearch、Solr。
三種技術(shù)方法的優(yōu)缺點及適用場景對比如表1所示。
▼表1 三種技術(shù)方法的優(yōu)缺點及適用場景對比

針對這三種技術(shù)實現(xiàn)方法,該如何做技術(shù)選型呢?OLAP技術(shù)需要考慮系統(tǒng)的數(shù)據(jù)量、性能和靈活性三個方面,但是目前還沒有一種方法能同時在這三個方面做到完美,在設(shè)計時需要在這三個方面之間做出取舍。比如MPP架構(gòu),它有很好的數(shù)據(jù)量和靈活性的支持,但是它的性能無法保證,隨著計算量和復(fù)雜度的增加,響應(yīng)時間可能從秒級變?yōu)榉昼娂壣踔列r級。而預(yù)計算系統(tǒng)和搜索引擎技術(shù)方法則是通過犧牲靈活性來換取高性能。另外,還要考慮是否需要查詢明細數(shù)據(jù)等輔助需求。
四、OLAP技術(shù)典型流行產(chǎn)品示例
本節(jié)介紹兩個Hadoop體系兼容的OLAP產(chǎn)品,一個是基于MPP架構(gòu)的OLAP引擎—Impala,一個是基于預(yù)計算方法的OLAP引擎—Kylin。
1.Impala
Impala屬于SQL on Hadoop的開源MPP分析引擎,可在Hadoop集群上運行。它由Cloudera公司主導(dǎo)開發(fā),作為Hive的高性能替代品,用于大數(shù)據(jù)實時查詢分析。Impala提高了Apache Hadoop的SQL查詢性能,同時保留了熟悉的Hive用戶體驗,采用SQL語法(Hive SQL),使得Hive的用戶可以順暢地遷移到Impala上。Impala采用與基礎(chǔ)數(shù)據(jù)存儲引擎分離的設(shè)計,使用HDFS和HBase作為數(shù)據(jù)存儲,并從Hive獲取元數(shù)據(jù),這是它與傳統(tǒng)關(guān)系型數(shù)據(jù)庫系統(tǒng)的主要區(qū)別。傳統(tǒng)關(guān)系數(shù)據(jù)的查詢引擎與存儲引擎是緊密耦合的。
為了避免延遲,Impala避開了MapReduce,通過專門實現(xiàn)的分布式查詢引擎直接訪問數(shù)據(jù),比Hive快幾個數(shù)量級。
Impala的優(yōu)點如下所示。
- 在數(shù)據(jù)所在節(jié)點對數(shù)據(jù)進行本地處理,避免網(wǎng)絡(luò)傳輸瓶頸;
- 支持線性擴展;
- 與Hadoop體系使用相同的基礎(chǔ)設(shè)施,直接利用Hadoop體系的元數(shù)據(jù)、安全和資源管理;
- 直接讀取Hadoop系統(tǒng)中的數(shù)據(jù),無須進行高成本的數(shù)據(jù)格式轉(zhuǎn)換;
- 所有數(shù)據(jù)均可立即查詢。
Impala由三個服務(wù)組成:Impala主進程(Impala daemon)、StateStore進程和Catalog進程。
- Impala主進程:負責(zé)接收客戶端的查詢請求,協(xié)調(diào)請求在集群中的執(zhí)行,并負責(zé)執(zhí)行一個查詢片段。Impala主進程包含三個子模塊:Query Planner、Query Coordinator、Query Exec Engine。每臺服務(wù)器上會運行一個Impala主進程(與HDFS的DataNode在同一個主機上運行),所有的Impala主進程都是對等的。Impala主程序與StateStore進程保持持續(xù)通信,以確認哪些節(jié)點的主進程是健康的并可以接收新工作。
- StateStore進程:充當(dāng)Impala的Catalog儲存庫和元數(shù)據(jù)訪問網(wǎng)關(guān),會檢查集群中所有Impala主進程的運行狀況,并將發(fā)現(xiàn)結(jié)果不斷傳遞給每個主進程。
- Catalog進程:將Impala SQL語句的元數(shù)據(jù)更改傳遞到集群的所有Impala主進程中。
Impala架構(gòu)示意圖如圖2所示。

▲圖2 Impala架構(gòu)
2.Kylin
Apache Kylin是一個開源的分布式分析引擎,提供Hadoop、Spark之上的SQL查詢接口及多維分析能力以支持超大規(guī)模數(shù)據(jù),最初由eBay開發(fā)并貢獻至開源社區(qū)。
Kylin通過三步支持查詢。
- 模型定義:定義數(shù)據(jù)集的星形或雪花形模型。
- 預(yù)計算:通過數(shù)據(jù)立方體計算引擎(Cube Build Engine)組件對明細數(shù)據(jù)進行離線計算,生成用于查詢的數(shù)據(jù)立方體(OLAP Cube),并將Cube數(shù)據(jù)存儲于HBase中。
- 在線查詢:在線查詢時通過標準SQL或RESTful API,查詢引擎(Query Engine)首先對預(yù)計算的數(shù)據(jù)立方體進行查詢,如果命中緩存,則可以實現(xiàn)秒級響應(yīng),如果沒有命中緩存,則進行實時計算,延遲會比較高。
Kylin原理示意圖如圖3所示。

圖3 Kylin原理
Apache Kylin的特性如下所示。
- 能夠處理百億規(guī)模數(shù)據(jù),可擴展,預(yù)計算生成數(shù)據(jù)立方體,在線查詢亞秒級響應(yīng)。
- 兼容Hadoop體系。
- 提供標準SQL,支持大部分查詢功能。
- 能與BI工具的無縫整合,如Tableau。
本文摘編于《數(shù)據(jù)應(yīng)用工程:方法論與實踐》,經(jīng)出版方授權(quán)發(fā)布。(書號:9787111704096)轉(zhuǎn)載請保留文章出處。
































