kylin -- 快速入門概述

1.快速入門概述

1.1 Kylin 定義

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

1.2 Kylin 特點

Kylin 的主要特點包括支持 SQL 接口、支持超大規模數據集、亞秒級響應、可伸縮性、高吞吐率、BI 工具集成等。
 
1標準 SQL 接口:Kylin 是以標準的 SQL作爲對外服務的接口。
 
2支持超大數據集:Kylin 對於大數據的支撐能力可能是目前所有技術中最爲領先的。 早在 2015 eBay 的生產環境中就能支百
億記錄的秒級查詢,之後在移動的應用場景中又有了千億記錄秒級查詢的案例。
 
3亞秒級響應:Kylin 擁有優異的查詢相應速度,這點得益於預計算,很多複雜的計算,比如連接、聚合,在離線的預計算過程中就已經完成,這大大降低了查詢時刻所需的計算量, 提高了響應速度。
 
4可伸縮性和高吞吐率:單節點 Kylin 可實現每秒 70 個查詢,還可以搭建 Kylin 的集羣。
 
5BI 工具集成
Kylin 可以與現有的 BI 工具集成,具體包括如下內容。
ODBC:與 TableauExcelPowerBI 等工具集成
JDBC:與 SaikuBIRT Java 工具集成
RestAPI:與 JavaScriptWeb 網頁集成
Kylin 開發團隊還貢獻了 Zepplin 的插件,也可以使用 Zepplin 來訪問 Kylin 服務。

 

1.3 Kylin 架構

1)REST Server
REST Server 是一套面向應用程序開發的入口點,旨在實現針對 Kylin 平臺的應用開發工作。 此類應用程序可以提供查詢、獲取結果、觸發 Cube 構建任務、獲取元數據以及獲取用戶權限等等。另外可以通過 Restful 接口實現 SQL 查詢。
2)查詢引擎(Query Engine
Cube 準備就緒後,查詢引擎就能夠獲取並解析用戶查詢。它隨後會與系統中的其它組件進行交互,從而向用戶返回對應的結果。
3Routing
負責將解析的 SQL 生成的執行計劃轉換成 Cube 緩存的查詢,Cube 是通過預計算緩存在 hbase 中,這部分查詢可以在秒級設置毫秒級完成,而且還有一些操作使用過的查詢原始數據(存儲在 Hadoop HDFS 中通過 Hive 查詢)。這部分查詢延遲較高。
4)元數據管理工具(Metadata
Kylin 是一款元數據驅動型應用程序。元數據管理工具是一大關鍵性組件,用於對保存在 Kylin 當中的所有元數據進行管理,其中包括最爲重要的 Cube 元數據。其它全部組件的正常運作都需以元數據管理工具爲基礎。Kylin 的元數據存儲在 hbase 中。
5)任務引擎(Cube Build Engine
這套引擎的設計目的在於處理所有離線任務,其中包括 Shell 腳本、Java API 以及 MapReduce 任務等等。任務引擎對 Kylin 當中的全部任務加以管理與協調,從而確保每一項任務都能得到切實執行並解決其間出現的故障。
 

1.4 Kylin 工作原理

Apache Kylin 的工作原理本質上是 MOLAPMultidimension On-Line Analysis Processing
Cube,也就是多維立方體分析。是數據分析中非常經典的理論,下面對其做簡要介紹。

1.4.1 維度和度量

維度:即觀察數據的角度。比如員工數據,可以從性別角度來分析,也可以更加細化,從入職時間或者地區的維度來觀察。維是一組離散的值,比如說性別中的男和女,或者時間維度上的每一個獨立的日期。因此在統計時可以將維度值相同的記錄聚合在一起,然後應用聚合函數做累加、平均、最大和最小值等聚合計算。
度量:即被聚合(觀察)的統計值,也就是聚合運算的結果。比如說員工數據中不同性別員工的人數,又或者說在同一年入職的員工有多少。

1.4.2 Cube Cuboid

有了維度跟度量,一個數據表或者數據模型上的所有字段就可以分類了,它們要麼是維度,要麼是度量(可以被聚合)。於是就有了根據維度和度量做預計算的 Cube 理論。給定一個數據模型,我們可以對其上的所有維度進行聚合,對於 N 個維度來說,組合的所有可能性共有 2n 種。對於每一種維度的組合,將度量值做聚合計算,然後將結果保存爲一個物化視圖,稱爲Cuboid。所有維度組合的 Cuboid 作爲一個整體,稱爲 Cube。下面舉一個簡單的例子說明,假設有一個電商的銷售數據集,其中維度包括時間[time]、商品[item]、地區[location]和供應商[supplier],度量爲銷售額。那麼所有維度的組合就有 24 = 16 種,如下圖所示:

一維度(1D)的組合有:[time][item][location][supplier]4 種;
二維度(2D)的組合有:[time, item][time, location][time, supplier][item, location]、[item, supplier]、[location, supplier]3 種;
三維度(3D)的組合也有 4 種;
最後還有零維度(0D)和四維度(4D)各有一種,總共 16 種。
注意:每一種維度組合就是一個 Cuboid16 Cuboid 整體就是一個 Cube

1.4.3 核心算法

Kylin 的工作原理就是對數據模型做 Cube 預計算,並利用計算的結果加速查詢:
1)指定數據模型,定義維度和度量;
2)預計算 Cube,計算所有 Cuboid 並保存爲物化視圖;預計算過程是 Kylin Hive 中讀取原始數據,按照我們選定的維度進行計算,並將結果集保存到 Hbase 中,默認的計算引擎爲 MapReduce,可以選擇 Spark 作爲計算引擎。一次build 的結果,我們稱爲一個 Segment。構建過程中會涉及多個 Cuboid 的創建,具體創建過 程由 kylin.Cube.algorithm 參數決定,參數值可選 autolayer inmem, 默認值爲 auto,即Kylin 會通過採集數據動態地選擇一個算法 (layer or inmem),如果用戶很瞭解 Kylin 和自身的數據、集羣,可以直接設置喜歡的算法。
3)執行查詢,讀取 Cuboid,運行,產生查詢結果。

1.4.3.1 逐層構建算法(layer)

我們知道,一個 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+1 次 MapReduce Job
算法優點:
1)此算法充分利用了 MapReduce 的能力,處理了中間複雜的排序和洗牌工作,故而算法代碼清晰簡單,易於維護;
2)受益於 Hadoop 的日趨成熟,此算法對集羣要求低,運行穩定;在內部維護 Kylin的過程中,很少遇到在這幾步出錯的情況;即便是在 Hadoop 集羣比較繁忙的時候,任務也能完成。
算法缺點:
1)當 Cube 有比較多維度的時候,所需要的 MapReduce 任務也相應增加;由於 Hadoop的任務調度需要耗費額外資源,特別是集羣較龐大的時候,反覆遞交任務造成的額外開銷會相當可觀;
2)此算法會對 Hadoop MapReduce 輸出較多數據; 雖然已經使用了 Combiner 來減少從Mapper 端到 Reducer 端的數據傳輸,所有數據依然需要通過 Hadoop MapReduce 來排序和組合才能被聚合,無形之中增加了集羣的壓力;
3)對 HDFS 的讀寫操作較多:由於每一層計算的輸出會用做下一層計算的輸入,這些Key-Value 需要寫到 HDFS 上;當所有計算都完成後,Kylin 還需要額外的一輪任務將這些文件轉成 HBase HFile 格式,以導入到 HBase 中去;
總體而言,該算法的效率較低,尤其是當 Cube 維度數較大的時候。
1.4.3.2 快速構建算法(inmem)
也被稱作逐段”(By Segment) 逐塊”(By Split) 算法,從 1.5.x 開始引入該算法,利用Mapper 端計算先完成大部分聚合,再將聚合後的結果交給 Reducer,從而降低對網絡瓶頸的壓力。該算法的主要思想是,對 Mapper 所分配的數據塊,將它計算成一個完整的小 Cube 段(包含所有 Cuboid);每個 Mapper 將計算完的 Cube 段輸出給 Reducer 做合併,生成大 Cube,也就是最終結果;如圖所示解釋了此流程。
 
與舊算法相比,快速算法主要有兩點不同:
1Mapper 會利用內存做預聚合,算出所有組合;Mapper 輸出的每個 Key 都是不同的,這樣會減少輸出到 Hadoop MapReduce 的數據量;
2)一輪 MapReduce 便會完成所有層次的計算,減少 Hadoop 任務的調配。

 

 

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