Kylin 大數據下的OLAP解決方案(原理篇)

//
Apache Kylin 大數據下的OLAP解決方案(原理篇)
http://mp.weixin.qq.com/s?__biz=MzI2MDU5ODY2Mg==&mid=2247483927&idx=1&sn=6697cde0bc54e1725da868c5cf52aeb0&chksm=ea667cfedd11f5e8803a6ee9ebc2444d515b7c18c641261f697d4ca341d1439ac3acca472240&mpshare=1&scene=1&srcid=0306oTHdHxhTi2IWYsK4Etr6#rd

**前言******

在現在的大數據時代,Hadoop已經成為大數據事實上的標準規(guī)范惕橙,一大批工具陸陸續(xù)續(xù)圍繞Hadoop平臺來構建芙委,用來解決不同場景下的需求良哲。
讓我們來想想有哪些業(yè)務需求呢?


比如Hive是基于Hadoop的一個用來做企業(yè)數據倉庫的工具瘪弓,可以將存儲在HDFS分布式文件系統(tǒng)上的數據文件映射為一張數據庫表粹湃,并提供SQL查詢功能呵哨,Hive執(zhí)行引擎可以將SQL轉換為MapReduce任務來進行運行,非常適合數據倉庫的數據分析两入。

再比如HBase是基于Hadoop净宵,實現高可用性,高性能裹纳,面向列择葡,可伸縮的分布式存儲系統(tǒng),Hadoop架構中的HDFS為HBase提供了高可靠性的底層存儲支持剃氧。


但是缺少一個基于Hadoop的分布式分析引擎刁岸,雖然目前存在業(yè)務分析工具,如Tableau等她我,但是他們往往存在很大的局限虹曙,比如難以水平擴展迫横、無法處理超大規(guī)模數據,同時也缺少Hadoop的支持酝碳。
ApacheKylin的出現矾踱,能夠基于Hadoop很好地解決上面的問題。Apache Kylin是一個開源的分布式存儲引擎疏哗。它提供Hadoop之上的SQL查詢接口及多維分析(OLAP)能力以支持大規(guī)模數據呛讲,能夠處理TB乃至PB級別的分析任務,能夠在亞秒級查詢巨大的Hive表返奉,并支持高并發(fā)贝搁。

大數據多維分析的挑戰(zhàn)

在Apache Kylin集群上跑了多個Cube測試,結果表明它能夠有效解決大數據計算分析的三大痛點問題:

接下面我們就來詳細說說****Apache ****Kylin****的基本原理和架構
ApacheKylin從數據倉庫中最常用的Hive中讀取源數據芽偏,使用 MapReduce作為Cube構建的引擎雷逆,并把預計算結果保存在HBase中,對外暴露Rest API/JDBC/ODBC的查詢接口污尉。


核心:預計算

Apache Kylin的核心思想是預計算膀哲,即對多維分析可能用到的度量進行預計算,將計算好的結果保存成 Cube被碗,供查詢時直接訪問某宪。把高復雜度的聚合運算、多表連接等操作轉換成對預計算結果的查詢锐朴,這決定了Kylin能夠擁有很好的快速查詢和高并發(fā)能力兴喂。

上圖所示就是一個Cube的例子,假設我們有4個dimension焚志,這個Cube中每個節(jié)點(稱作Cuboid)都是這4個dimension的不同組合瞻想,每個組合定義了一組分析的dimension(如group by),measure的聚合結果就保存在這每個Cuboid上娩嚼。查詢時根據SQL找到對應的Cuboid蘑险,讀取measure的值,即可返回岳悟。
Cube計算

Cube的構建佃迄,Kylin提供了一個稱作Layer Cubing的算法。簡單來說贵少,就是按照dimension數量從大到小的順序呵俏,從Base Cuboid開始,依次基于上一層Cuboid的結果進行再聚合滔灶。一個N維的完全Cube普碎,是由:1個N維子立方體(Cuboid), N個(N-1)維Cuboid, N*(N-1)/2個(N-2)維Cuboid …, N個1維Cuboid, 1個0維Cuboid录平,總共2^N個子立方體組成的麻车,每一層的計算都是一個單獨的Map Reduce任務缀皱。如下圖所示:


此算法Mapper以上一層Cuboid的結果(Key-Value對)作為輸入。由于Key是由各維度值拼接在一起动猬,從其中找出要聚合的維度啤斗,去掉它的值成新的Key,然后把新Key和Value輸出赁咙,進而HadoopMapReduce對所有新Key進行排序钮莲、洗牌(shuffle)、再送到Reducer處彼水;Reducer的輸入會是一組有相同Key的Value集合崔拥,對這些Value做聚合計算,再結合Key輸出就完成了一輪計算凤覆。
由于Mapper不做預聚合链瓦,此算法會對Hadoop MapReduce輸出較多數據; 雖然已經使用了Combiner來減少從Mapper端到Reducer端的數據傳輸,所有數據依然需要通過Hadoop MapReduce來排序和組合才能被聚合叛赚,無形之中增加了集群的壓力。
快速Cube算法(Fast Cubing)

該算法的主要思想是稽揭,對Mapper所分配的數據塊俺附,將它計算成一個完整的小Cube 段(包含所有Cuboid);每個Mapper將計算完的Cube段輸出給Reducer做合并溪掀,生成大Cube事镣,也就是最終結果,如下圖:


Mapper的預聚合:Mapper會利用內存做預聚合揪胃,算出所有組合璃哟;Mapper輸出的每個Key都是不同的,這樣會減少輸出到Hadoop MapReduce的數據量喊递,Combiner也不再需要随闪;一輪MapReduce便會完成所有層次的計算,減少Hadoop任務的調配骚勘。
在Cuboid的推算過程中的每一步铐伴,Fast Cubing算法都會比逐層算法產生更少數據;總的加起來俏讹,新算法中的Mapper對Hadoop的輸出当宴,會比老算法少一個或幾個數量級;越少的數據泽疆,意味著越少的I/O和CPU户矢,從而使得性能得以提升。
Cube存儲

MapReduce的計算結果最終保存到HBase中殉疼,HBase中每行記錄的Rowkey由dimension組成梯浪,measure會保存在 column family中捌年。為了減小存儲代價,這里會對dimension和measure進行編碼驱证。查詢階段延窜,利用HBase列存儲的特性就可以保證Kylin有良好的快速響應和高并發(fā)。



有了這些預計算的結果抹锄,當收到用戶的SQL請求逆瑞,Kylin會對SQL做查詢計劃,并把本該進行的Join伙单、Sum获高、CountDistinct等操作改寫成Cube的查詢操作。
Cube查詢


查詢時吻育,SQL語句被SQL解析器翻譯成一個解釋計劃念秧,從這個計劃可以準確知道用戶要查哪些表,它們是怎樣join起來布疼,有哪些過濾條件等等摊趾。Kylin會用這個計劃去匹配尋找合適的Cube。
如果有Cube命中游两,這個計劃會發(fā)送到存儲引擎砾层,翻譯成對存儲(默認HBase)相應的Scan操作。Groupby和過濾條件的列贱案,用來找到 Cuboid肛炮,過濾條件會被轉換成Scan的開始和結束值,以縮小Scan的范圍; Scan的result宝踪,Rowkey會被反向解碼成各個dimension的值侨糟,Value會被解碼成Metrics值 。

Apache Kylin****項目實踐

目前基于kylin的數據分析平臺已經在業(yè)務中開始測試以及使用瘩燥,并且在用戶管理和權限操作方面做了的二次開發(fā)改造秕重,以實現project和cube的安全管理。
下圖是cube的查詢響應圖表厉膀,cube 大小為157GB悲幅,包括一個事實表,14個維度和4個度量:



在項目實踐過程中也遇到問題:
Hadoop任務內存資源不夠站蝠,cube計算失敗汰具。

調整MapReduce分配資源參數:在cube計算過程中,會出現mr任務失敗菱魔,根據日志排查留荔,主要因mr的內存分配不足導致,于是,我們根據任務實際情況整體調整了yarn.nodemanager.resource.memory-mb聚蝶、mapreduce.map.memory.mb杰妓、
mapreduce.map.java.opts、mapreduce.reduce.memory.mb碘勉、apreduce.reduce.java.opts
等參數巷挥。
JVMGC相關參數調優(yōu):可以通過GC調優(yōu)獲得更好的GC性能,減少單次GC的時間和FULL GC頻率验靡。

使用Apache Kylin的實踐總結

1倍宾、大的事實表采用天分區(qū)增量構建,為了不影響查詢性能胜嗓,可以定期做合并(Merge)高职,周期可以根據實際情況確定。
2辞州、對于維表比較大的情況怔锌,或者查詢Select部分存在復雜的邏輯判斷,存在Apache Kylin不支持的函數或語句時变过,可以將事實表和維表的關聯處理創(chuàng)建為Hive視圖埃元,之后根據視圖創(chuàng)建Cube模型。
3媚狰、每次查詢必然帶有的條件建議在字典設置步驟將其設置為Mandatory岛杀。這樣會最終 Build出來Cube的大小會減少一半。
4哈雏、Cube的維度如果超過10個楞件,建議將常用的聚合字段做分組衫生。
5裳瘪、Cube定義中RowKey順序:Mandatory維度,Where過濾條件中出現頻率較多的維度罪针,高基數維度彭羹,低基數維度。
6泪酱、當Segment中某一個Cuboid的大小超過一定的閾值時派殷,修改數據分片大小以實現數據讀取的并行化,從而優(yōu)化Cube的查詢速度墓阀。
7毡惜、設計合適的維度編碼能減少維度對空間的占用,比如對于高基數的維度如果使用Dict字典編碼方式占用大量空間斯撮,容易造成構建引擎或查詢引擎的內存溢出经伙。
8、對維度進行分片勿锅,如果Cuboid中某兩個行的Shard by Dimension的值相同帕膜,那么無論這個Cuboid最終會被劃分多少個分片枣氧,這兩行數據必然會被分配到同一個分片中,方便查詢和索引垮刹。
9达吞、部署層面,可以通過Nginx在前端做負載均衡荒典,后端啟動多個Query Server接收查詢請求處理酪劫。

基于Kylin的前景規(guī)劃

經過項目的摸索和實踐,Apache Kylin能很好的解決開篇所說的大數據計算分析的3大痛點問題种蝶,提升業(yè)務的查詢效率契耿。
首先,在接下來我們也將會持續(xù)關注Kylin的發(fā)展變化螃征,包括數據字典的分布式構建以及基于Kafka定義Streaming Table搪桂,從而完成準實時Cube的構建的特性。
其次盯滚,規(guī)劃設計符合需求的拖拽前臺界面踢械,支持探索性數據查詢。采用拖拽式方便用戶使用魄藕;規(guī)定化前臺界面内列,屏蔽后臺技術細節(jié),避免低效的查詢出現背率。
在目前的工作基礎上規(guī)劃構建基于Apache Kylin的大數據OLAP分析平臺话瞧, 如下圖所示:



最后還將繼續(xù)調研和分析新的存儲引擎和構建引擎來滿足更多的業(yè)務需求。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末寝姿,一起剝皮案震驚了整個濱河市交排,隨后出現的幾起案子,更是在濱河造成了極大的恐慌饵筑,老刑警劉巖埃篓,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異根资,居然都是意外死亡架专,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門玄帕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來部脚,“玉大人,你說我怎么就攤上這事裤纹∥酰” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長钱雷。 經常有香客問我骂铁,道長,這世上最難降的妖魔是什么罩抗? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任拉庵,我火速辦了婚禮,結果婚禮上套蒂,老公的妹妹穿的比我還像新娘钞支。我一直安慰自己,他們只是感情好操刀,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布烁挟。 她就那樣靜靜地躺著,像睡著了一般骨坑。 火紅的嫁衣襯著肌膚如雪撼嗓。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天欢唾,我揣著相機與錄音且警,去河邊找鬼。 笑死礁遣,一個胖子當著我的面吹牛斑芜,可吹牛的內容都是我干的。 我是一名探鬼主播祟霍,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼杏头,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了沸呐?” 一聲冷哼從身側響起醇王,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎垂谢,沒想到半個月后厦画,有當地人在樹林里發(fā)現了一具尸體疮茄,經...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡滥朱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了力试。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片徙邻。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖畸裳,靈堂內的尸體忽然破棺而出缰犁,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布帅容,位于F島的核電站颇象,受9級特大地震影響,放射性物質發(fā)生泄漏并徘。R本人自食惡果不足惜遣钳,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望麦乞。 院中可真熱鬧蕴茴,春花似錦、人聲如沸姐直。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽声畏。三九已至撞叽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間插龄,已是汗流浹背能扒。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留辫狼,地道東北人初斑。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像膨处,于是被迫代替她去往敵國和親见秤。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內容