Kylin版本:2.5.1web
前言算法
膜拜大神,Kylin
做爲第一個由國人主導並貢獻到Apache
基金會的開源項目,堪稱大數據分析界的「神獸」。因此我也是抓緊時間來學習Kylin
,感覺Kylin
所帶來的魅力。shell
Kylin
的出現就是爲了解決大數據系統中TB
級別數據的數據分析需求,它提供Hadoop/Spark
之上的SQL
查詢接口及多維分析(OLAP
)能力以支持超大規模數據,它能在亞秒內查詢巨大的Hive
表。其核心是預計算,計算結果存在HBase
中。apache
做爲大數據分析神器,它也須要站在巨人的肩膀上,依賴HDFS
、MapReduce/Spark
、Hive/Kafka
、HBase
等服務。緩存
<!-- more -->安全
Kylin
的主要優點爲如下幾點:微信
OLAP
引擎:Kylin
是爲減小在Hadoop/Spark
上百億規模數據查詢延遲而設計Hadoop ANSI SQL
接口:Kylin
爲Hadoop
提供標準SQL
支持大部分查詢功能Kylin
,用戶能夠與Hadoop
數據進行亞秒級交互,在一樣的數據集上提供比Hive
更好的性能MOLAP Cube
):用戶可以在Kylin
裏爲百億以上數據集定義數據模型並構創建方體BI
工具無縫整合:Kylin
提供與BI工具的整合能力,如Tableau
,PowerBI/Excel
,MSTR
,QlikSense
,Hue
和SuperSet
Job
管理與監控;壓縮與編碼;增量更新;利用HBase Coprocessor
;基於HyperLogLog
的Dinstinc Count
近似算法;友好的web
界面以管理,監控和使用立方體;項目及表級別的訪問控制安全;支持LDAP
、SSO
正是有以上那麼多的優點存在,也吸引了不少企業使用Kylin
來分析數據,如圖所示:架構
Kylin
的核心思想是預計算。併發
理論基礎是:以空間換時間。即多維分析可能用到的度量進行預計算,將計算好的結果保存成Cube
並存儲到HBase
中,供查詢時直接訪問。框架
大體流程:將數據源(好比Hive
)中的數據按照指定的維度和指標,由計算引擎Mapreduce
離線計算出全部可能的查詢結果(即Cube
)存儲到HBase
中。HBase
中每行記錄的Rowkey
由各維度的值拼接而成,度量會保存在column family
中。爲了減小存儲代價,這裏會對維度和度量進行編碼。查詢階段,利用HBase
列存儲的特性就能夠保證Kylin
有良好的快速響應和高併發。以下圖所示:
如上圖所示,Kylin
在架構設計上,可大致分爲四個部分:數據源,構建Cube的計算引擎,存儲引擎,對外查詢接口。
其中數據源主要是Hive
、Kafka
;計算框架默認爲MapReduce
,也支持Spark
;結果存儲在HBase
中;對外查詢接口支持REST API
、JDBC
、ODBC
。
構建Cube
的計算引擎模塊以下:
REST Server
是一套面向應用程序開發的入口點,旨在實現針對Kylin
平臺的應用開發工做。此類應用程序能夠提供查詢、獲取結果、觸發cube
構建任務、獲取元數據以及獲取用戶權限等等。另外能夠經過Restful
接口實現SQL
查詢。
當cube
準備就緒後,查詢引擎就可以獲取並解析用戶查詢。它隨後會與系統中的其餘組件進行交互,從而向用戶返回對應的結果。
負責將解析的SQL
生成的執行計劃轉換成cube
緩存的查詢,cube
是經過預計算緩存在HBase
中,這部分查詢能夠在秒級甚至毫秒級完成,還有一些操做使用過的原始數據(存儲在Hadoop
的hdfs
中經過hive
查詢),這部分查詢延遲較高。
Kylin
是一款元數據驅動型應用程序。元數據管理工具是一大關鍵性組件,用於對保存在Kylin
當中的全部元數據進行管理,其中包括最爲重要的cube
元數據,其它所有組建的正常運做都需以元數據管理工具爲基礎,包括cube
的定義、星狀模型的定義、job
的信息、job
的輸出信息、維度的directory
信息等等,Kylin
的元數據和cube
都存儲在HBase
中。
這套引擎的設計目的在於處理全部離線任務,其中包括shell
腳本、Java API
以及MapReduce
任務等等。任務引擎對Kylin
當中的所有任務加以管理與協調,從而確保每一項任務都能獲得切實執行並解決期間出現的障礙。
這套引擎負責管理底層存儲,特別是cuboid
,其以鍵值對的形式進行保存。存儲引擎使用的是HBase
,這是目前Hadoop
生態系統當中最理想的鍵值系統使用方案。Kylin
還可以經過擴展實現對其它鍵值系統的支持,例如Redis
。
表定義在Hive
中,是Data cube
(數據立方體)的數據源,在build cube
以前,Hive
表必須同步在Kylin
中。
用來定義一個Fact Table
(事實表)和多個Lookup Table
(查找表),及所包含的dimension
(維度)列、Messures
(度量)列、partition
(分區)列和date
(日期)格式
它定義了使用的模型、模型中的表的維度(dimensions
)、度量(messures
)、如何對段分區( segments partitions
)、合併段(segments auto-merge
)等的規則。
它是立方體構建(build
)後的數據載體,一個segment
映射HBase
中的一張表。Cube
實例構建後,會產生一個新的Segment
。一旦某個已經構建的Cube
的原始數據發生變化,只須要刷新(fresh
)變化的時間段所關聯的segment
便可。
維度能夠簡單理解爲觀察數據的角度,通常是一組離散的值。
指的是該維度在數據集中出現的不一樣值的個數。好比「城市」是一個維度,若是該維度下有2000
個不一樣的值,那麼該維度的基數就是2000
。一般一個維度的基數會從幾十到幾萬個不等,個別維度如id
的基數會超過百萬甚至千萬。
基數超過一百萬的維度一般被稱爲超高基數維度(Ultra High Cardinality, UHC
),須要引發設計者的注意。
友情提示:
Cube
中全部維度的基數均可以體現出Cube
的複雜度,若是一個Cube
中有好幾個超高基數維度,那麼這個Cube
膨脹的機率就會很高。在建立Cube
前須要對全部維度的基數作一個瞭解,這樣有助於設計合理的Cube
。
計算基數有多種途徑,最簡單的方法就是讓Hive
執行一個count distinct
的SQL
查詢。Kylin
也提供了計算基數的方法,Kylin
對基數的計算方法採用的是HyperLogLog
的近似算法,與精確值略有偏差,但做爲參考值已經足夠了。
度量就是被聚合的統計值,也是聚合運算的結果,通常指聚合函數(如:sum
、count
、average
等)。好比學生成績、銷售額等。
度量主要用於分析或者評估,好比對趨勢的判斷,對業績或效果的評定等等。
事實表是指包含了大量不冗餘數據的表,其列通常有兩種,分別爲包含事實數據的列,包含維度foreign key
的列。
包含了對事實表的某些列擴充說明的字段。
由Fact table
和Lookup table
抽象出來的表,包含了多個相關的列,以提供對數據不一樣維度的觀察,其中每列的值的數目稱爲Cardinatily
。
本文主要介紹了Kylin
的原理、架構、及基本概念。讀完本文以後,應該就能瞭解Kylin
的定位及意義。更多內容能夠去Kylin
官網進行了解:傳送門
後續還會有更深層次的Kylin
系列博文,關注一下啦😄
好了各位,以上就是這篇文章的所有內容了,能看到這裏的人呀,都是 人才。
白嫖很差,創做不易。 各位的支持和承認,就是我創做的最大動力,咱們下篇文章見!
若是本篇博客有任何錯誤,請批評指教,不勝感激 !
本文來自: 微信公衆號【大數據實戰演練】。閱讀更多精彩好文,歡迎關注微信公衆號【大數據實戰演練】。