1. 程式人生 > >Kylin系列之二:原理介紹

Kylin系列之二:原理介紹

集群 盡心 idt 理解 數據存儲 tableau 定時 hadoop 探索

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系列之二:原理介紹