Kylin系列之二:原理介紹
Kylin系列之二:原理介紹
2018年4月15日
15:52
因何而生
Kylin和hive的區別
1. hive主要是離線分析平臺,適用於已經有成熟的報表體系,每天只要定時運行即可。
2. Kylin主要是MLOAP(多維在線分析平臺)。在線意味著提供快速的相應速度。主要適用於分析師不知道自己需要哪些數據,建立怎樣的模型,需要不斷的摸索,查詢一致形成一個完整的模型和方案。
3. 通常的做法是在Kylin中進行數據的調研,探索,建立模型。形成固定模式後在hive中進行運行。
原理與架構
1. 基本原理是使用MR或者Spark對數據進行全方面的計算;然後將結果集存儲到HBase中;分析師在進行數據調研時就可以直接訪問HBase的結果集了。
2. 因為在Kylin進行預計算的過程中,我們是不知道分析師需要哪些結果的,因此,Kylin會盡可能多的盡心預計算,這樣就會耗費很多的運算和存貯資源。因此如何對Cuboid進行修剪以及segmen的合並等是優化的重點
3. 如圖我們可以看出Kylin的架構:
A. 預計算邏輯:通過REST API 或者JDBC,ODBC的方式,將Cube提交給Kylin引擎,引擎將Cube解析為相應的MR程序,從hive中獲取數據相關的元素據,然後在Hadoop集群中運行,並將結果存儲在HBase中。Cube預計算結束
B. 查詢預計算邏輯:通過REST API 或者JDBC,ODBC的方式,將Cube提交給Kylin引擎,Kylin將數據解析為相應的HBase代碼,在HBase中進行查詢,然後將結果返回給調用方
4. Kylin在本質上只是一個查詢解析引擎,將Cube或者SQL方言解析為相應的查詢語句,然後腳本相應的服務端進行計算
A. Hive:主要提供表的元數據信息。Kylin鏈接Hive獲取查詢表在hdfs上的路徑。
B. Hadoop:提供基礎的數據存儲服務。
C. MR/Spark:提供計算引擎,Kylin將Cube解析為相應的執行代碼,交給MR/Spark運行。
D. HBase:負責存儲Kylin中相關的Cube,Model元數據,並存放Cube進行預計算的結果集。
E. Zeppline/Tableau:進行結果數據的查詢與展示。
架構如下(截圖來自官網):
基本概念
維度(Dimension)和度量(Measure)
1. 維度是觀察數據的角度,比如:人的性別,學生的年級等。在SQL中,我們可以認為被group by的字段就是維度。也可以理解為統計中的稱名數據
2. 度量是表示可以用來計算的列,比如學生考試成績,消費者的交易金額等。在SQL中我們可以認為可以被聚合函數進行計算,比如sum(),avg()的都是度量
3. 維度和度量並不是絕對意義的分割的,他們之間是可以相互轉換的。比如我們要統計學生分數的分布情況,這個時候分數就是一個維度列;當我們統計學生的平均分時,這個時候分數就是一個度量列。
4. 維度的基數:即維度列字段的個數。如性別這一維度的基數是2,只有男女;季節這一維度列的基數是4,因為只有春夏秋冬四季。但是如果將學生的學號作為維度列的話,一個學校有1萬名學生的話,該維度的基數列為1萬。通產基數超過一百萬的維度稱為超高基數維度,需要引起Cube設計者註意。
事實表,維度表
1. 這是BI中的概念。各種維度加上都做構成一個事實。比如學生的學號與姓名,加上考試成績構成一個事實
雪花與星型模型
1. 所謂的雪花模型指一個事實表鏈接多個維度表,且維度之間存在關系,維度表擁有自己的維度表
2. 所謂的星型模型只一個事實表鏈接多個維度表,維度表之間沒有關系
3. Kylin可以處理星型模型,對雪花模型無能為力(或者需要轉換成星型模型)
Cube和Cuboid
1. Cube是一個表中選中參與預計算的所有維度的所有基數的組合總稱,而Cuboid是其中的一個組合,所有的Cuboid的總體就是所有的維度的所有基數。
2. 如下面的表,假設我們分析的維度列有兩個(也就是該cube中有兩個維度列,分別為性別國家),那所有的Cuboid是:【男】,【女】,【中國】,【英國】,【美國】,【男,中國】,【女,中國】,【男,英國】,【女,英國】,【男,美國】,【女,美國】。其中【】就是一個Cuboid,所有的可能的集合就是一個Cube(當然在具體分析中可以對Cuboid進行裁剪,以進行優化)
3. 也就說,Kylin的預計算,就是對度量列的統計,然後group by Cube中的所有Cuboid.
4. 可以想象的,如果維度過多或者維度的基數過高,就會導致Kylin在進行計算時,會將數據膨脹到很大,耗費計算和存儲資源。因此如何優化Cube的構建將是優化的突破點
關於表和圖的角色分析
1. 學生信息表和課程表是維度表,學生成績表是事實表
2. 學生成績表中的學號和課程編號通常在SQL中被放入group by中,是維度;而成績經常被sum,avg是度量
3. 如果僅有三張表,那麽三張表構成一個星型模型(這裏設計的既不符合RDMS的設計要求);假設在學生信息表的國家並不是國家的名稱,而是國家的編碼,在另外有一張國家表,專門用來存儲國家和國家代碼的映射關系。那麽學生信息表,學生成績表,國家表就構成了一個雪花模型。
數據表示例
學生信息表:
學號 |
性別 |
國家 |
姓名 |
001 |
男 |
中國 |
張三 |
002 |
女 |
英國 |
李四 |
003 |
男 |
美國 |
王五 |
學生成績表:
學號 |
課程編號 |
成績 |
001 |
1 |
100 |
001 |
2 |
99 |
002 |
1 |
88 |
002 |
2 |
77 |
003 |
1 |
66 |
004 |
2 |
55 |
課程表
課程編號 |
課程名稱 |
教材 |
1 |
英語 |
怎麽也學不會 |
2 |
計算機 |
從入門到放棄 |
雪花模型
Kylin系列之二:原理介紹