Apache頂級專案介紹5 - Kylin
Apache頂級專案介紹5,我們迎來的中國自己的開源,來自本土eBay的頂級專案Kylin。神馬?沒聽過? 別急,放心,Apache的頂級專案各個都身負絕技。
有人問,為什麼突然介紹Kylin,呃,有小夥伴熱情的提及的Kylin,希望來一篇介紹,本人之前有關注瞭解過,但沒有深入研究過,所以我們先學現賣,符合入門介紹篇。
Kylin(麒麟),由eBay研發並貢獻並於2014年10月開源,並於當年11月成為
Apache孵化器專案,是第一個主要由中國團隊完整貢獻給Apache的專案。去年2015年12月,Apache基金會ASF正式批准Kylin為頂級專案。其發展之快可謂迅猛,搭上了基於大資料的OLAP快車,同時也感慨開源之偉大與貢獻。
老樣子,一言已概之,Kylin官網(不敢恭維啊,文件宣傳也要做做啊)介紹說,Kylin是一個開源分散式分析引擎,提供了基於Hadoop的超大型資料集(TB/PB級別)的SQL介面以及多維度的OLAP分散式聯機分析。
上架構圖:
可以看到中華文化之麒麟,贊一下!很清晰的架構圖,底層儲存使用HBase, 資料輸入以及Cube Building基於Hive, 中間資料儲存HDFS, On Top of 核心引擎之上,提供了REST API, SQL Based Toll / JDBC/ODBC等。右邊還有其核心基於HBase的低延遲OLAP Cube;什麼叫低延遲,Kylin官方資料給出數百億行資料查詢延時需要保持在亞秒級別!Niubility!其實得益於HBase.
官網給出了幾個簡單步驟作為事例:
1.從star schema中識別一組Hive表
2.基於Hive表,offline batch構建cube
3.使用sql或者REST API, JDBC, ODBC查詢
Kylin平臺的設計思路其實並非全新,在過去關係資料庫大行其道之日早有,簡單來講其思路就是把預先計算完成的結果儲存起來以備分析查詢, 利用所有可能緯度組合為每個層次生成cuboid(基本方體),又或是在不同層次上對全部指數進行計算。
科普一下,cube作為核心概念,英文叫多維立方體,cube好比一個座標系,每個Dimension代表一個座標系,其每個點的對應值需要從相對應每一個座標軸取值去獲取,這個點cube中稱作cell。
cube的基本概念:緯度於度量
緯度Dimension: 緯度提供了分類,表示一類分析角度,緯度,如時間,產品,地域等。
度量Measure:表示聚合分析的數字資訊,其集合構成另一個特殊緯度,如數量,金額等。
Kylin的一個核心演算法思想:一個n緯的完全Cube,1個n緯子立方體(Cuboid),n個(n-1)緯cuboid, n*(n-1)/2個(n-2)緯cuboid,n個緯cuboid,1個0緯cubid,總共2^n個字立方體組成;暈否?
舉例來說,group by a, b結果,可以基於group by a,b,c的結果,通過去掉c後聚合得來,這樣可以減少重複計算,當0緯度的cuboid計算出來的時候,真個
Cube的計算就大功告成!
拓撲圖:
核心思想,從關係型到key-value。當Hive中資料規模超過百億,萬億水平,一些簡單的問題如查詢2015年銷售額等就會帶來巨大的表掃描,時間也會無法接受。所以cube完全進行預計算,並對結果加以儲存。來個術語叫做:
Relational to Key-Value, KV.
Kylin正是構建在這套理論之上,並且充分借用發揮Hadoop生態系統的威力。
1.從Hive中讀取資料(HDFS)
2.執行offline job Map/Reduce實現預計算處理
3.將運算結果cube儲存到HBase
4.藉助Zookeeper進行任務協調
演算法中充分利用了MapReduce的能力,處理中間的複雜排序以及shuffle。其中對HDFS操作較多,每一層的key-value都需要寫到hdfs,所有計算結束後需要將其轉成HBase的HFile格式並匯入。
好了,看看Kylin的容貌以及如何建立cube吧:
呃,顏值一般般,恰如麒麟啊?
建立cube:
1.建立專案
2.匯入hive
3.建立資料模型
4.建立cube
包括cube info,dimensions,measures等等。
5. offline job
6. Tableau報表整合
Kylin已經在eBay內部生產使用驗證,處理其內部龐大資料集。效能優勢明顯。未來應該會繼續支援更多Hadoop, Spark生態圈,提供快速實時OLAP,以及更多BI工具整合。
好了,我們先到這裡了,感謝前eBay參與開發使用Kylin的資深專家的指導與探討。鑑於現學現賣,各位極客們包涵。我們下一篇繼續大資料三劍客!!!
wechat: erixhao