【入門】Kylin 基本原理及概念

Kylin版本:2.5.1web

前言算法

膜拜大神,Kylin做爲第一個由國人主導並貢獻到Apache基金會的開源項目,堪稱大數據分析界的「神獸」。因此我也是抓緊時間來學習Kylin,感覺Kylin所帶來的魅力。shell


1、Kylin簡介

Kylin的出現就是爲了解決大數據系統中TB級別數據的數據分析需求,它提供Hadoop/Spark之上的SQL查詢接口及多維分析(OLAP)能力以支持超大規模數據,它能在亞秒內查詢巨大的Hive表。其核心是預計算,計算結果存在HBase中。apache

做爲大數據分析神器,它也須要站在巨人的肩膀上,依賴HDFSMapReduce/SparkHive/KafkaHBase等服務。緩存

<!-- more -->安全

2、Kylin優點

Kylin的主要優點爲如下幾點:微信

  • 可擴展超快OLAP引擎:Kylin是爲減小在Hadoop/Spark上百億規模數據查詢延遲而設計
  • Hadoop ANSI SQL 接口:KylinHadoop提供標準SQL支持大部分查詢功能
  • 交互式查詢能力:經過Kylin,用戶能夠與Hadoop數據進行亞秒級交互,在一樣的數據集上提供比Hive更好的性能
  • 多維立方體(MOLAP Cube):用戶可以在Kylin裏爲百億以上數據集定義數據模型並構創建方體
  • BI工具無縫整合:Kylin提供與BI工具的整合能力,如TableauPowerBI/ExcelMSTRQlikSenseHueSuperSet
  • 其它特性:Job管理與監控;壓縮與編碼;增量更新;利用HBase Coprocessor;基於HyperLogLogDinstinc Count近似算法;友好的web界面以管理,監控和使用立方體;項目及表級別的訪問控制安全;支持LDAPSSO

正是有以上那麼多優點存在,也吸引了不少企業使用Kylin來分析數據,如圖所示:架構

3、基本原理

Kylin的核心思想是預計算併發

理論基礎是:以空間換時間。即多維分析可能用到的度量進行預計算,將計算好的結果保存成Cube並存儲到HBase中,供查詢時直接訪問。框架

大體流程:將數據源(好比Hive)中的數據按照指定的維度和指標,由計算引擎Mapreduce離線計算出全部可能的查詢結果(即Cube)存儲到HBase中。HBase中每行記錄的Rowkey各維度的值拼接而成,度量會保存在column family中。爲了減小存儲代價,這裏會對維度和度量進行編碼。查詢階段,利用HBase列存儲的特性就能夠保證Kylin有良好的快速響應和高併發。以下圖所示:

4、架構

如上圖所示,Kylin在架構設計上,可大致分爲四個部分:數據源構建Cube的計算引擎存儲引擎對外查詢接口

其中數據源主要是HiveKafka;計算框架默認爲MapReduce,也支持Spark;結果存儲在HBase中;對外查詢接口支持REST APIJDBCODBC

構建Cube的計算引擎模塊以下:

1. REST Server

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

2. 查詢引擎(Query Engine)

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

3. Routing

負責將解析的SQL生成的執行計劃轉換成cube緩存的查詢,cube是經過預計算緩存在HBase中,這部分查詢能夠在秒級甚至毫秒級完成,還有一些操做使用過的原始數據(存儲在Hadoophdfs中經過hive查詢),這部分查詢延遲較高。

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

Kylin是一款元數據驅動型應用程序。元數據管理工具是一大關鍵性組件,用於對保存在Kylin當中的全部元數據進行管理,其中包括最爲重要的cube元數據,其它所有組建的正常運做都需以元數據管理工具爲基礎,包括cube的定義、星狀模型的定義、job的信息、job的輸出信息、維度的directory信息等等,Kylin的元數據和cube都存儲在HBase中。

5. 任務引擎(Cube Build Engine)

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

6. 存儲引擎(Storage Engine)

這套引擎負責管理底層存儲,特別是cuboid,其以鍵值對的形式進行保存。存儲引擎使用的是HBase,這是目前Hadoop生態系統當中最理想的鍵值系統使用方案。Kylin還可以經過擴展實現對其它鍵值系統的支持,例如Redis

5、基本概念

1. Table(表)

表定義在Hive中,是Data cube (數據立方體)的數據源,在build cube以前,Hive表必須同步在Kylin中。

2. Model(模型)

用來定義一個Fact Table (事實表)和多個Lookup Table (查找表),及所包含的dimension (維度)列、Messures(度量)列、partition(分區)列和date(日期)格式

3. Cube(立方體)

它定義了使用的模型、模型中的表的維度(dimensions)、度量(messures)、如何對段分區( segments partitions)、合併段(segments auto-merge)等的規則。

4. Cube Segments(立方體段)

它是立方體構建(build)後的數據載體,一個segment映射HBase中的一張表。Cube實例構建後,會產生一個新的Segment。一旦某個已經構建的Cube的原始數據發生變化,只須要刷新(fresh)變化的時間段所關聯的segment便可。

5. dimension (維度)

維度能夠簡單理解爲觀察數據的角度,通常是一組離散的值。

6. Cardinality (維度的基數)

指的是該維度在數據集中出現的不一樣值的個數。好比「城市」是一個維度,若是該維度下有2000個不一樣的值,那麼該維度的基數就是2000。一般一個維度的基數會從幾十到幾萬個不等,個別維度如id的基數會超過百萬甚至千萬。

基數超過一百萬的維度一般被稱爲超高基數維度(Ultra High Cardinality, UHC),須要引發設計者的注意。

友情提示:

Cube中全部維度的基數均可以體現出Cube的複雜度,若是一個Cube中有好幾個超高基數維度,那麼這個Cube膨脹的機率就會很高。在建立Cube前須要對全部維度的基數作一個瞭解,這樣有助於設計合理的Cube

計算基數有多種途徑,最簡單的方法就是讓Hive執行一個count distinctSQL查詢。Kylin也提供了計算基數的方法,Kylin對基數的計算方法採用的是HyperLogLog的近似算法,與精確值略有偏差,但做爲參考值已經足夠了。

7. Measures(度量)

度量就是被聚合的統計值,也是聚合運算的結果,通常指聚合函數(如:sumcountaverage等)。好比學生成績、銷售額等。

度量主要用於分析或者評估,好比對趨勢的判斷,對業績或效果的評定等等。

8. Fact table(事實表)

事實表是指包含了大量不冗餘數據的表,其列通常有兩種,分別爲包含事實數據的列,包含維度foreign key的列。

9. Lookup table(查看錶)

包含了對事實表的某些列擴充說明的字段。

10. Dimenssion Table(維表)

Fact tableLookup table抽象出來的表,包含了多個相關的列,以提供對數據不一樣維度的觀察,其中每列的值的數目稱爲Cardinatily

6、總結

本文主要介紹了Kylin原理架構、及基本概念。讀完本文以後,應該就能瞭解Kylin定位及意義。更多內容能夠去Kylin官網進行了解:傳送門

後續還會有更深層次的Kylin系列博文,關注一下啦😄


點關注,不迷路

好了各位,以上就是這篇文章的所有內容了,能看到這裏的人呀,都是 人才

白嫖很差,創做不易。 各位的支持和承認,就是我創做的最大動力,咱們下篇文章見!

若是本篇博客有任何錯誤,請批評指教,不勝感激 !

本文來自: 微信公衆號【大數據實戰演練】。閱讀更多精彩好文,歡迎關注微信公衆號【大數據實戰演練】。

相關文章
相關標籤/搜索