寫在前面: 博主是一名軟件工程系大數據應用開發專業大二的學生,暱稱來源於《愛麗絲夢遊仙境》中的Alice和自己的暱稱。作爲一名互聯網小白,
寫博客一方面是爲了記錄自己的學習歷程,一方面是希望能夠幫助到很多和自己一樣處於起步階段的萌新
。由於水平有限,博客中難免會有一些錯誤,有紕漏之處懇請各位大佬不吝賜教!個人小站:http://alices.ibilibili.xyz/ , 博客主頁:https://alice.blog.csdn.net/
儘管當前水平可能不及各位大佬,但我還是希望自己能夠做得更好,因爲一天的生活就是一生的縮影
。 我希望在最美的年華,做最好的自己
!
在之前的博客中,博主已經爲大家帶來了Kylin的簡單介紹,環境搭建以及簡單入門使用。本篇博客,博主爲大家帶來的是關於Kylin工作原理的介紹!
Kylin的工作原理
Apache Kylin的工作原理本質上是 MOLAP(多維立方體分析)。
維度和度量
- 維度就是觀察數據的角度 ,例如:
電商的銷售數據,可以從時間的維度來觀察,也可以細化從時間和地區的維度來觀察。
統計時,可以把維度值相同的記錄聚合在一起,然後應用聚合函數做累加、平均、去重計數等聚合計算。
- 度量就是被聚合的統計值,也是聚合運算的結果。
例如:
時間(維度) | 銷售額(度量) |
---|---|
2019 1Q | 1.7M |
2019 2Q | 2.1M |
2019 3Q | 1.6M |
2019 4Q | 1.8M |
時間(維度) | 地區(維度) |
---|---|
2019 1Q | 中國 |
2019 1Q | 北美 |
2019 2Q | 中國 |
2019 2Q | 北美 |
2019 3Q | 中國 |
2019 3Q | 北美 |
2019 4Q | 中國 |
2019 4Q | 北美 |
Cube 和 Cuboid
- 一個數據表或數據模型上的字段要麼是維度,要麼是度量(可以被聚合)
- 給定一個數據模型,可以對其上的所有維度進行組合。對於N個維度來說,組合的所有可能性共有2 的N 次方種
- 對於每一種維度的組合,將度量做聚合運算,然後將運算的結果保存爲一個物化視圖,稱爲Cuboid(立方形)
- 所有維度組合的Cuboid作爲一個整體,被稱爲Cube(立方體)。一個Cube就是許多按維度聚合的物化視圖的集合。
關於數據立方體Cube
- Cube 是所有 dimession 的組合
- 每一種 dimession 的組合稱之爲cuboid(立方形)。某一有 n 個 dimession 的 cube 會有 2^n個 cuboid。
- 數據立方體只是多維模型的一個形象的說法。
爲什麼叫立方體?
- 立方體本身只有三維,但多維模型不僅限於三維模型,可以組合更多的維度。
- 爲了與傳統關係型數據庫的二維表區別開來,纔有了數據立方體的叫法。
工作原理
Apache Kylin的工作原理是對數據模型做Cube預計算,並利用計算的結果加速查詢。具體工作過程如下:
- 指定數據模型,定義維度和度量
- 預計算Cube,計算所有Cuboid並保存爲物化視圖
- 執行查詢時,讀取Cuboid,運算,產生查詢結果
高效OLAP分析:
- Kylin的查詢過程不會掃描原始記錄,而是通過預計算預先完成表的關聯、聚合等複雜運算
- 利用預計算的結果來執行查詢,相比非預計算的查詢技術,其速度一般要快一到兩個數量級,在超大的數據集上優勢更明顯
- 數據集達到千億乃至萬億級別時,Kylin的速度可以超越其他非預計算技術1000倍以上
技術架構
Apache Kylin系統可以分爲在線查詢和離線構建兩部分。
在線查詢模式主要處於上半部分,離線構建處於下半部分。
在線查詢
離線構建
以下爲Kylin技術架構的具體內容:
- 數據源主要是Hadoop Hive,數據以關係表的形式輸入,且必須符合星形模型,保存着待分析的用戶數據。根據元數據的定義,構建引擎從數據源抽取數據,並構建Cube
- Kylin可以使用MapReduce或者Spark作爲構建引擎。構建後的Cube保存在右側的存儲引擎中,一般選用HBase作爲存儲
- 完成了離線構建後,用戶可以從上方查詢系統發送SQL進行查詢分析
- Kylin提供了各種Rest API、JDBC/ODBC接口。無論從哪個接口進入,SQL最終都會來到Rest服務層,再轉交給查詢引擎進行處理
- SQL語句是基於數據源的關係模型書寫的,而不是Cube
■ Kylin在設計時,刻意對查詢用戶屏蔽了Cube的概念
■ 分析師只需要理解簡單的關係模型就可以使用Kylin,沒有額外的學習門檻,傳統的SQL應用也很容易遷移
■ 查詢引擎解析SQL,生成基於關係表的邏輯執行計劃,然後將其轉譯爲基於Cube的物理執行計劃,最後查詢預計算生成的Cube併產生結果,整個過程不會訪問原始數據源
總結
本篇博客從多個角度爲大家揭示了Kylin的工作原理。相信在看之前對Kylin的工作原理還一頭霧水的朋友,看完一定能夠恍然大悟😎
如果以上過程中出現了任何的紕漏錯誤,煩請大佬們指正😅
受益的朋友或對大數據技術感興趣的夥伴記得點贊關注支持一波🙏