Kylin

Kylin

第1章 概述

1.1 Kylin定義

Apache Kylin是一個開源的分佈式分析引擎,提供Hadoop/Spark之上的SQL查詢接口及多維分析(OLAP)能力以支持超大規模數據,最初由eBay開發並貢獻至開源社區。它能在亞秒內查詢巨大的Hive表。

1.2 Kylin架構

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-ThXDXFYG-1578389535487)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119210941597.png)]

1)REST Server

REST Server是一套面向應用程序開發的入口點,旨在實現針對Kylin平臺的應用開發工作。 此類應用程序可以提供查詢、獲取結果、觸發cube構建任務、獲取元數據以及獲取用戶權限等等。另外可以通過Restful接口實現SQL查詢。

2)查詢引擎(Query Engine)

當cube準備就緒後,查詢引擎就能夠獲取並解析用戶查詢。它隨後會與系統中的其它組件進行交互,從而向用戶返回對應的結果。

3)路由器(Routing)

在最初設計時曾考慮過將Kylin不能執行的查詢引導去Hive中繼續執行,但在實踐後發現Hive與Kylin的速度差異過大,導致用戶無法對查詢的速度有一致的期望,很可能大多數查詢幾秒內就返回結果了,而有些查詢則要等幾分鐘到幾十分鐘,因此體驗非常糟糕。最後這個路由功能在發行版中默認關閉。

4)元數據管理工具(Metadata)

Kylin是一款元數據驅動型應用程序。元數據管理工具是一大關鍵性組件,用於對保存在Kylin當中的所有元數據進行管理,其中包括最爲重要的cube元數據。其它全部組件的正常運作都需以元數據管理工具爲基礎。 Kylin的元數據存儲在hbase中。

5)任務引擎(Cube Build Engine)

這套引擎的設計目的在於處理所有離線任務,其中包括shell腳本、Java API以及Map Reduce任務等等。任務引擎對Kylin當中的全部任務加以管理與協調,從而確保每一項任務都能得到切實執行並解決其間出現的故障。

1.3 Kylin特點

Kylin的主要特點包括支持SQL接口、支持超大規模數據集、亞秒級響應、可伸縮性、高吞吐率、BI工具集成等。

1)標準SQL接口:Kylin是以標準的SQL作爲對外服務的接口。

2)支持超大數據集:Kylin對於大數據的支撐能力可能是目前所有技術中最爲領先的。早在2015年eBay的生產環境中就能支持百億記錄的秒級查詢,之後在移動的應用場景中又有了千億記錄秒級查詢的案例。

3)亞秒級響應:Kylin擁有優異的查詢相應速度,這點得益於預計算,很多複雜的計算,比如連接、聚合,在離線的預計算過程中就已經完成,這大大降低了查詢時刻所需的計算量,提高了響應速度。

4)可伸縮性和高吞吐率:單節點Kylin可實現每秒70個查詢,還可以搭建Kylin的集羣。

5)BI工具集成

Kylin可以與現有的BI工具集成,具體包括如下內容。

ODBC:與Tableau、Excel、PowerBI等工具集成

JDBC:與Saiku、BIRT等Java工具集成

RestAPI:與JavaScript、Web網頁集成

Kylin開發團隊還貢獻了Zepplin的插件,也可以使用Zepplin來訪問Kylin服務。

第2章 Kylin環境搭建

2.1 安裝地址

1)官網地址

http://kylin.apache.org/cn/

2)官方文檔

http://kylin.apache.org/cn/docs/

3)下載地址

http://kylin.apache.org/cn/download/

2.2 安裝部署

1)將apache-kylin-2.5.1-bin-hbase1x.tar.gz上傳到Linux

2)解壓apache-kylin-2.5.1-bin-hbase1x.tar.gz到/opt/module

[atguigu@hadoop102 sorfware]$ tar -zxvf apache-kylin-2.5.1-bin-hbase1x.tar.gz -C /opt/module/

注意:需要在/etc/profile文件中配置HADOOP_HOME,HIVE_HOME,HBASE_HOME並source使其生效。

3)啓動

[atguigu@hadoop102 kylin]$ bin/kylin.sh start

啓動之後查看各個節點進程:

--------------------- hadoop102 ----------------

3360 JobHistoryServer

31425 HMaster

3282 NodeManager

3026 DataNode

53283 Jps

2886 NameNode

44007 RunJar

2728 QuorumPeerMain

31566 HRegionServer

--------------------- hadoop103 ----------------

5040 HMaster

2864 ResourceManager

9729 Jps

2657 QuorumPeerMain

4946 HRegionServer

2979 NodeManager

2727 DataNode

--------------------- hadoop104 ----------------

4688 HRegionServer

2900 NodeManager

9848 Jps

2636 QuorumPeerMain

2700 DataNode

2815 SecondaryNameNode

注意:啓動Kylin之前要保證HDFS,YARN,ZK,HBASE相關進程是正常運行的。

在http://hadoop102:7070/kylin查看Web頁面

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-pSQJ4bgN-1578389535488)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119211039098.png)]

用戶名爲:ADMIN,密碼爲:KYLIN(系統已填)

4)關閉

[atguigu@hadoop102 kylin]$ bin/kylin.sh stop

第3章 快速入門

需求:實現按照維度(工作地點)統計員工信息

3.1 數據準備

在Hive中創建數據,分別創建部門和員工外部表,並向表中導入數據。

(1)原始數據

(2)建表語句

創建部門表

create external table if not exists default.dept(

deptno int,

dname string,

loc int

)

row format delimited fields terminated by ‘\t’;

創建員工表

create external table if not exists default.emp(

empno int,

ename string,

job string,

mgr int,

hiredate string,

sal double,

comm double,

deptno int)

row format delimited fields terminated by ‘\t’;

(3)查看創建的表

hive (default)> show tables;

OK

tab_name

dept

emp

(4)向外部表中導入數據

導入數據

hive (default)> load data local inpath ‘/opt/module/datas/dept.txt’ into table default.dept;

hive (default)> load data local inpath ‘/opt/module/datas/emp.txt’ into table default.emp;

查詢結果

hive (default)> select * from emp;

hive (default)> select * from dept;

3.2 創建項目

3.2.1 登錄系統

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-9UzJVj5p-1578389535489)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119211149340.png)]

3.2.2 創建工程

1)點擊圖上所示“+”號

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Ixnlp8OP-1578389535491)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119211209242.png)]

2)填入項目名及描述點擊Submit

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-vkj87B70-1578389535491)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119211221185.png)]

3.2.3 選擇數據源

1)選擇加載數據源方式

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-bOtl4xKO-1578389535492)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119211236129.png)]

2)輸入要作爲數據源的表

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-1NhMraL4-1578389535492)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119211249475.png)]

3)查看數據源

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-xkJDQ68D-1578389535492)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119211302778.png)]

3.3 創建Model

1)回到Models頁面

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-ZvDB0fRt-1578389535493)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119211320907.png)]

2)點擊New按鈕後點擊New Model

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-usDHBt04-1578389535493)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119211342957.png)]

3)填寫Model名稱及描述後Next

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-TwjJvQsw-1578389535494)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119211355389.png)]

4)選擇事實表

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-7Oedl9Gt-1578389535495)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119211947690.png)]

5)添加維度表

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-1gluBN24-1578389535495)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119212000411.png)]

6)選擇添加的維度表及join字段

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-IjxQ8dyl-1578389535496)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119212028551.png)]

7)選擇維度信息

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-BuN6MPKV-1578389535496)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119212109378.png)]

8)選擇度量信息

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-r4IpDX17-1578389535496)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119212131195.png)]

9)添加分區信息及過濾條件之後“Save”

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-TzHEGsGA-1578389535497)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119212147243.png)]

10)創建Model完成

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-g0G2H5i6-1578389535497)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119212200575.png)]

3.4 創建Cube

1)點擊New按鈕然後選擇New Cube

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-qkaI2Czp-1578389535498)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119212219786.png)]

2)選擇Model及填寫Cube Name

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-6zC92YjL-1578389535498)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119212232100.png)]

3)添加維度

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-rCsxyfrA-1578389535498)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119212247035.png)]

4)添加需要做預計算的內容

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-X2bm0UmZ-1578389535499)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119212310049.png)]

5)動態更新相關(默認)

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-v6APe2Sr-1578389535500)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119212324985.png)]

6)高階模塊(默認)

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-8A7Se1d1-1578389535500)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119212518252.png)]

7)需要修改的配置

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-8Cvu7cTb-1578389535500)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119212529118.png)]

8)Cube信息展示

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-sJNp7U4c-1578389535501)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119212539359.png)]

9)Cube配置完成

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-EK3SJ5s9-1578389535502)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119212551069.png)]

10)觸發預計算

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-CcXlvVqW-1578389535502)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119212633407.png)]

11)查看Build進度

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Ht7gVZ5V-1578389535503)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119212643685.png)]

12)構建Cube完成

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-b0Yh3n7R-1578389535503)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119212656108.png)]

3.5 Hive和Kylin性能對比

需求:根據部門名稱[dname]統計員工薪資總數[sum(sal)]

3.5.1 Hive查詢

hive> select dname,sum(sal) from emp e join dept d on e.deptno = d.deptno group by dname;

Query ID = atguigu_20181210104140_4931b735-5bad-4a4f-bce6-67985b8fe30a

Total jobs = 1

SLF4J: Class path contains multiple SLF4J bindings.

… …

… …

Stage-Stage-2: Map: 1 Reduce: 1 Cumulative CPU: 3.95 sec HDFS Read: 13195 HDFS Write: 48 SUCCESS

Total MapReduce CPU Time Spent: 3 seconds 950 msec

OK

ACCOUNTING 3750.0

RESEARCH 10875.0

SALES 9400.0

Time taken: 23.893 seconds, Fetched: 3 row(s)

hive>

3.5.2 Kylin查詢

1)進入Insight頁面

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-I0DlHe7W-1578389535503)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119212720606.png)]

2)在New Query中輸入查詢語句並Submit

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-ciPEqhPb-1578389535504)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119212732440.png)]

3)數據圖表展示及導出

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-a4WPqLv8-1578389535504)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119212742788.png)]

4)圖表展示之條形圖

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-nrLl6wWZ-1578389535505)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119212754114.png)]

4)圖表展示之餅圖

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-zvnx4U42-1578389535505)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119212806575.png)]

第4章 Cube構建原理

4.1 Cube構建流程

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-PRozAriR-1578389535506)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119212823491.png)]

4.2 Cube構建算法

4.2.1 逐層構建算法(layer)

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-didIER79-1578389535506)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119212837737.png)]

我們知道,一個N維的Cube,是由1個N維子立方體、N個(N-1)維子立方體、N*(N-1)/2個(N-2)維子立方體、…、N個1維子立方體和1個0維子立方體構成,總共有2^N個子立方體組成,在逐層算法中,按維度數逐層減少來計算,每個層級的計算(除了第一層,它是從原始數據聚合而來),是基於它上一層級的結果來計算的。比如,[Group by A, B]的結果,可以基於[Group by A, B, C]的結果,通過去掉C後聚合得來的;這樣可以減少重複計算;當 0維度Cuboid計算出來的時候,整個Cube的計算也就完成了。

每一輪的計算都是一個MapReduce任務,且串行執行;一個N維的Cube,至少需要N次MapReduce Job。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-8tanKw9V-1578389535507)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119212912926.png)]

算法優點:

1)此算法充分利用了MapReduce的優點,處理了中間複雜的排序和shuffle工作,故而算法代碼清晰簡單,易於維護;

2)受益於Hadoop的日趨成熟,此算法非常穩定,即便是集羣資源緊張時,也能保證最終能夠完成。

算法缺點:

1)當Cube有比較多維度的時候,所需要的MapReduce任務也相應增加;由於Hadoop的任務調度需要耗費額外資源,特別是集羣較龐大的時候,反覆遞交任務造成的額外開銷會相當可觀;

2)由於Mapper邏輯中並未進行聚合操作,所以每輪MR的shuffle工作量都很大,導致效率低下。

3)對HDFS的讀寫操作較多:由於每一層計算的輸出會用做下一層計算的輸入,這些Key-Value需要寫到HDFS上;當所有計算都完成後,Kylin還需要額外的一輪任務將這些文件轉成HBase的HFile格式,以導入到HBase中去;

總體而言,該算法的效率較低,尤其是當Cube維度數較大的時候。

4.2.2 快速構建算法(inmem)

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-ysgLJ6Po-1578389535507)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119212930886.png)]

也被稱作“逐段”(By Segment) 或“逐塊”(By Split) 算法,從1.5.x開始引入該算法,該算法的主要思想是,每個Mapper將其所分配到的數據塊,計算成一個完整的小Cube 段(包含所有Cuboid)。每個Mapper將計算完的Cube段輸出給Reducer做合併,生成大Cube,也就是最終結果。如圖所示解釋了此流程。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-UN625BNS-1578389535508)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119212946241.png)]

與舊算法相比,快速算法主要有兩點不同:

1) Mapper會利用內存做預聚合,算出所有組合;Mapper輸出的每個Key都是不同的,這樣會減少輸出到Hadoop MapReduce的數據量,Combiner也不再需要;

2)一輪MapReduce便會完成所有層次的計算,減少Hadoop任務的調配。

第5章 Cube構建優化

從之前章節的介紹可以知道,在沒有采取任何優化措施的情況下,Kylin會對每一種維度的組合進行預計算,每種維度的組合的預計算結果被稱爲Cuboid。假設有4個維度,我們最終會有24 =16個Cuboid需要計算。

但在現實情況中,用戶的維度數量一般遠遠大於4個。假設用戶有10 個維度,那麼沒有經過任何優化的Cube就會存在210 =1024個Cuboid;而如果用戶有20個維度,那麼Cube中總共會存在220 =1048576個Cuboid。雖然每個Cuboid的大小存在很大的差異,但是單單想到Cuboid的數量就足以讓人想象到這樣的Cube對構建引擎、存儲引擎來說壓力有多麼巨大。因此,在構建維度數量較多的Cube時,尤其要注意Cube的剪枝優化(即減少Cuboid的生成)。

5.1 使用衍生維度(derived dimension)

衍生維度用於在有效維度內將維度表上的非主鍵維度排除掉,並使用維度表的主鍵(其實是事實表上相應的外鍵)來替代它們。Kylin會在底層記錄維度表主鍵與維度表其他維度之間的映射關係,以便在查詢時能夠動態地將維度表的主鍵“翻譯”成這些非主鍵維度,並進行實時聚合。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Pc6VSdxc-1578389535508)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119213001006.png)]

雖然衍生維度具有非常大的吸引力,但這也並不是說所有維度表上的維度都得變成衍生維度,如果從維度表主鍵到某個維度表維度所需要的聚合工作量非常大,則不建議使用衍生維度。

5.2 使用聚合組(Aggregation group)

聚合組(Aggregation Group)是一種強大的剪枝工具。聚合組假設一個Cube的所有維度均可以根據業務需求劃分成若干組(當然也可以是一個組),由於同一個組內的維度更可能同時被同一個查詢用到,因此會表現出更加緊密的內在關聯。每個分組的維度集合均是Cube所有維度的一個子集,不同的分組各自擁有一套維度集合,它們可能與其他分組有相同的維度,也可能沒有相同的維度。每個分組各自獨立地根據自身的規則貢獻出一批需要被物化的Cuboid,所有分組貢獻的Cuboid的並集就成爲了當前Cube中所有需要物化的Cuboid的集合。不同的分組有可能會貢獻出相同的Cuboid,構建引擎會察覺到這點,並且保證每一個Cuboid無論在多少個分組中出現,它都只會被物化一次。

對於每個分組內部的維度,用戶可以使用如下三種可選的方式定義,它們之間的關係,具體如下。

1)強制維度(Mandatory),如果一個維度被定義爲強制維度,那麼這個分組產生的所有Cuboid中每一個Cuboid都會包含該維度。每個分組中都可以有0個、1個或多個強制維度。如果根據這個分組的業務邏輯,則相關的查詢一定會在過濾條件或分組條件中,因此可以在該分組中把該維度設置爲強制維度。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-YQ3urEPP-1578389535509)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119213015462.png)]

2)層級維度(Hierarchy),每個層級包含兩個或更多個維度。假設一個層級中包含D1,D2…Dn這n個維度,那麼在該分組產生的任何Cuboid中, 這n個維度只會以(),(D1),(D1,D2)…(D1,D2…Dn)這n+1種形式中的一種出現。每個分組中可以有0個、1個或多個層級,不同的層級之間不應當有共享的維度。如果根據這個分組的業務邏輯,則多個維度直接存在層級關係,因此可以在該分組中把這些維度設置爲層級維度。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-skymoef2-1578389535510)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119213026771.png)]

3)聯合維度(Joint),每個聯合中包含兩個或更多個維度,如果某些列形成一個聯合,那麼在該分組產生的任何Cuboid中,這些聯合維度要麼一起出現,要麼都不出現。每個分組中可以有0個或多個聯合,但是不同的聯合之間不應當有共享的維度(否則它們可以合併成一個聯合)。如果根據這個分組的業務邏輯,多個維度在查詢中總是同時出現,則可以在該分組中把這些維度設置爲聯合維度。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-L22ps56b-1578389535510)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119213038073.png)]

這些操作可以在Cube Designer的Advanced Setting中的Aggregation Groups區域完成,如下圖所示。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-SrJOcYxX-1578389535511)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119213050999.png)]

聚合組的設計非常靈活,甚至可以用來描述一些極端的設計。假設我們的業務需求非常單一,只需要某些特定的Cuboid,那麼可以創建多個聚合組,每個聚合組代表一個Cuboid。具體的方法是在聚合組中先包含某個Cuboid所需的所有維度,然後把這些維度都設置爲強制維度。這樣當前的聚合組就只能產生我們想要的那一個Cuboid了。

再比如,有的時候我們的Cube中有一些基數非常大的維度,如果不做特殊處理,它就會和其他的維度進行各種組合,從而產生一大堆包含它的Cuboid。包含高基數維度的Cuboid在行數和體積上往往非常龐大,這會導致整個Cube的膨脹率變大。如果根據業務需求知道這個高基數的維度只會與若干個維度(而不是所有維度)同時被查詢到,那麼就可以通過聚合組對這個高基數維度做一定的“隔離”。我們把這個高基數的維度放入一個單獨的聚合組,再把所有可能會與這個高基數維度一起被查詢到的其他維度也放進來。這樣,這個高基數的維度就被“隔離”在一個聚合組中了,所有不會與它一起被查詢到的維度都沒有和它一起出現在任何一個分組中,因此也就不會有多餘的Cuboid產生。這點也大大減少了包含該高基數維度的Cuboid的數量,可以有效地控制Cube的膨脹率。

5.4 Row Key優化

Kylin會把所有的維度按照順序組合成一個完整的Rowkey,並且按照這個Rowkey升序排列Cuboid中所有的行。

設計良好的Rowkey將更有效地完成數據的查詢過濾和定位,減少IO次數,提高查詢速度,維度在rowkey中的次序,對查詢性能有顯著的影響。

Row key****的設計原則如下:

1**)被用作where過濾的維度放在前邊。**

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Wn1afKLX-1578389535511)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119213109654.png)]

2**)基數大的維度放在基數小的維度前邊。**

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Yd8VWL5c-1578389535511)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119213123189.png)]

5.3 併發粒度優化

當Segment中某一個Cuboid的大小超出一定的閾值時,系統會將該Cuboid的數據分片到多個分區中,以實現Cuboid數據讀取的並行化,從而優化Cube的查詢速度。具體的實現方式如下:構建引擎根據Segment估計的大小,以及參數“kylin.hbase.region.cut”的設置決定Segment在存儲引擎中總共需要幾個分區來存儲,如果存儲引擎是HBase,那麼分區的數量就對應於HBase中的Region數量。kylin.hbase.region.cut的默認值是5.0,單位是GB,也就是說對於一個大小估計是50GB的Segment,構建引擎會給它分配10個分區。用戶還可以通過設置kylin.hbase.region.count.min(默認爲1)和kylin.hbase.region.count.max(默認爲500)兩個配置來決定每個Segment最少或最多被劃分成多少個分區。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-3FPpcO8k-1578389535512)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119213138590.png)]

由於每個Cube的併發粒度控制不盡相同,因此建議在Cube Designer 的Configuration Overwrites(上圖所示)中爲每個Cube量身定製控制併發粒度的參數。假設將把當前Cube的kylin.hbase.region.count.min設置爲2,kylin.hbase.region.count.max設置爲100。這樣無論Segment的大小如何變化,它的分區數量最小都不會低於2,最大都不會超過100。相應地,這個Segment背後的存儲引擎(HBase)爲了存儲這個Segment,也不會使用小於兩個或超過100個的分區。我們還調整了默認的kylin.hbase.region.cut,這樣50GB的Segment基本上會被分配到50個分區,相比默認設置,我們的Cuboid可能最多會獲得5倍的併發量。

第6章 BI工具集成

可以與Kylin結合使用的可視化工具很多,例如:

ODBC:與Tableau、Excel、PowerBI等工具集成

JDBC:與Saiku、BIRT等Java工具集成

RestAPI:與JavaScript、Web網頁集成

Kylin開發團隊還貢獻了Zepplin的插件,也可以使用Zepplin來訪問Kylin服務。

4.1 JDBC

1)新建項目並導入依賴

​ org.apache.kylin

​ kylin-jdbc

​ 2.5.1

2)編碼

package com.atguigu;

import java.sql.*;

public class TestKylin {

public static void main(String[] args) throws Exception {

​ //Kylin_JDBC 驅動

​ String KYLIN_DRIVER = “org.apache.kylin.jdbc.Driver”;

​ //Kylin_URL

​ String KYLIN_URL = “jdbc:kylin://hadoop102:7070/FirstProject”;

​ //Kylin的用戶名

​ String KYLIN_USER = “ADMIN”;

​ //Kylin的密碼

​ String KYLIN_PASSWD = “KYLIN”;

​ //添加驅動信息

​ Class.forName(KYLIN_DRIVER);

​ //獲取連接

​ Connection connection = DriverManager.getConnection(KYLIN_URL, KYLIN_USER, KYLIN_PASSWD);

​ //預編譯SQL

​ PreparedStatement ps = connection.prepareStatement(“SELECT sum(sal) FROM emp group by deptno”);

​ //執行查詢

​ ResultSet resultSet = ps.executeQuery();

​ //遍歷打印

​ while (resultSet.next()) {

​ System.out.println(resultSet.getInt(1));

​ }

}

}

3)結果展示

4.2 Zepplin

4.2.1 Zepplin安裝與啓動

1)將zeppelin-0.8.0-bin-all.tgz上傳至Linux

2)解壓zeppelin-0.8.0-bin-all.tgz之/opt/module

[atguigu@hadoop102 sorfware]$ tar -zxvf zeppelin-0.8.0-bin-all.tgz -C /opt/module/

3)修改名稱

[atguigu@hadoop102 module]$ mv zeppelin-0.8.0-bin-all/ zeppelin

4)啓動

[atguigu@hadoop102 zeppelin]$ bin/zeppelin-daemon.sh start

可登錄網頁查看,web默認端口號爲8080

http://hadoop102:8080

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-frkxpQzy-1578389535512)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119213202742.png)]

4.2.2 配置Zepplin支持Kylin

1)點擊右上角anonymous選擇Interpreter

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-ra3Bc07H-1578389535513)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119213215881.png)]

2)搜索Kylin插件並修改相應的配置

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-oQcpTpYd-1578389535513)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119213225695.png)]

3)修改完成點擊Save完成

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-6NYKeZWg-1578389535514)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119213238077.png)]

4.3.3 案例實操

需求:查詢員工詳細信息,並使用各種圖表進行展示

1)點擊Notebook創建新的note

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-5kxipEpP-1578389535514)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119213248008.png)]

2)填寫Note Name點擊Create

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-cgAePRJ6-1578389535514)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119213300698.png)]

3)執行查詢

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-bCVocm2l-1578389535515)(/Users/wangxiaomingcheng/Library/Application Support/typora-user-images/image-20191119213312672.png)]

4)結果展示

5)其他圖表格式

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章