核心思想:預計算。
對多維分析可能用到的度量進行預計算,將計算好的結果保存成Cube,并存在HBase中,供查詢時直接訪問
將高復雜度的聚合運算、多表連接……操作轉換成對預計算結果的查詢。決定了Kylin擁有很好的快速查詢、高并發能力
理論基礎:空間換時間
?
Cuboid:Kylin中將維度任意組合成為一個Cuboid
Cube:Kylin中將所有維度組合成為一個Cube,即包含所有的Cubeid
為了更好地使用Hadoop大數據環境,Kylin從通常用來做數據倉庫的HIve中讀取源數據,使用Mapreduce作為Cube構建的引擎,并將于計算結果保存在HBase中,對外暴露Restful API/JEBC/ODBC的查詢接口。
Kylin支持標準的ANSI SQL,所以可以和常用分析工具(Tableau、Excel)進行無縫對接
?
restful api:
符合REST架構設計的API。
RESTful架構,就是目前最流行的一種互聯網軟件架構。它結構清晰、符合標準、易于理解、擴展方便,所以正得到越來越多網站的采用
REST,即Representational State Transfer的縮寫
如果一個架構符合REST原則,就稱它為RESTful架構
什么是RESTful架構:
(1)每一個URI代表一種資源;
(2)客戶端和服務器之間,傳遞這種資源的某種表現層;
(3)客戶端通過四個HTTP動詞,對服務器端資源進行操作,實現"表現層狀態轉化"。
?
JDBC
(Java DataBase Connectivity,java數據庫連接)是一種用于執行SQL語句的Java API,可以為多種關系數據庫提供統一訪問,它由一組用Java語言編寫的類和接口組成。
JDBC提供了一種基準,據此可以構建更高級的工具和接口,使數據庫開發人員能夠編寫數據庫應用程序
?
ODBC
開放數據庫連接(Open Database Connectivity,ODBC)是微軟公司開放服務結構(WOSA,Windows Open Services Architecture)中有關數據庫的一個組成部分,它建立了一組規范,并提供了一組對數據庫訪問的標準API(應用程序編程接口)。
這些API利用SQL來完成其大部分任務。ODBC本身也提供了對SQL語言的支持,用戶可以直接將SQL語句送給ODBC。
開放數據庫互連(ODBC)是Microsoft提出的數據庫訪問接口標準。
開放數據庫互連定義了訪問數據庫API的一個規范,這些API獨立于不同廠商的DBMS,也獨立于具體的編程語言(但是Microsoft的ODBC文檔是用C語言描述的,許多實際的ODBC驅動程序也是用C語言寫的。)
ODBC規范后來被X/OPEN和ISO/IEC采納,作為SQL標準的一部分,具體內容可以參考《ISO/IEC 9075-3:1995 (E) Call-Level Interface (SQL/CLI)》等相關的標準文件。
?
ANSI SQL
“美國國家標準化組織(ANSI)”是一個核準多種行業標準的組織。
SQL作為關系型數據庫所使用的標準語言,最初是基于IBM的實現在1986年被批準的。
1987年,“國際標準化組織(ISO)”把ANSI SQL作為國際標準。
?
?
體系架構:
Kylin是一個MOLAP(多維在線聯機分析處理)系統,將Hive中的數據進行預計算,利用Hadoop的Mapreduce分布式計算框架來實現
Kylin獲取的表是星型模型結構的。目前建模時,只支持一張事實表,多張維表。
如果業務需求比較復雜,就要考慮在Hive中進行進一步處理。(比如生成一張大的寬表,或者采用View代替)
HBase:Kylin中用來存儲OLAP分析的Cube數據的地方,實現多維數據集的交互式查詢
?
?
Cube構建
Layer Cubing:按照dimension數量從大到小的順序,從Base Cuboid開始,依次基于上一層Cubeid的結果進行再聚合。每一層的計算都是一個單獨的MapReduce任務
逐層算法,啟動N+1輪MapReduce計算:
第一輪,讀取原始數據RawData,去掉不相關的列,只保留相關的列。同時對維度列進行壓縮編碼(此處,計算出ABCD組合,即base cuboid)
此后每一輪MapReduce,輸入是上一輪的輸出,以重用之前的計算結果,去掉要聚合的維度,算出新的Cuboid,直到最后算出所有的Cubeid
1.5.x開始引入Fast(in-mem) cubing算法,利用Mapper端計算先完成大部分聚合,再將聚合后的結果交給Reducer,從而降低對網絡瓶頸的壓力。
MapReduce的計算結果最終保存到HBase中,HBase中每行記錄的Rowkey由dimention組成,measure會保存再Column family中。為了減少存儲代價,會對dimension和measure進行編碼。
?
Kylin的Sql查詢
Cube構建完成后,可以查詢維度對應的度量值了。
查詢時,SQL語句被SQL解析器翻譯成一個解析計劃,從這個計劃可以準確知道用戶要查哪些表,怎樣join起來,有哪些過濾條件。Kylin用這個計劃去匹配找尋到合適的Cube
如果有Cube命中,這個計劃會發送到存儲引擎,翻譯成對存儲(默認HBase)相應的Scan操作
group by、過濾條件的列,用來找到Cuboid,過濾條件會被轉換成Scan的開始、結束值,以縮小Scan的范圍
Scan的result、Rowkey會被反向解碼成各個dimension的值,Value會被解碼成Metrics值,同時利用HBase列存儲的特性,可以保證Kylin有良好的快速響應、高并發
?
Kylin的特性、生態圈
1.可擴展、超快OLAP引擎
2.Hadoop ANSI SQL 接口
3.交互式查詢能力
4.多維立方體MOLAP Cube
5.與BI工具(Tableau)無縫整合
6.其他特性
?
LDAP:
LDAP是輕量目錄訪問協議,英文全稱是Lightweight Directory Access Protocol,一般都簡稱為LDAP。
它是基于X.500標準的,但是簡單多了并且可以根據需要定制。與X.500不同,LDAP支持TCP/IP,這對訪問Internet是必須的。
LDAP的核心規范在RFC中都有定義,所有與LDAP相關的RFC都可以在LDAPman RFC網頁中找到。
LDAP目錄以樹狀的層次結構來存儲數據。如果你對自頂向下的DNS樹或UNIX文件的目錄樹比較熟悉,也就很容易掌握LDAP目錄樹這個概念了。就象DNS的主機名那樣,
LDAP目錄記錄的標識名(Distinguished Name,簡稱DN)是用來讀取單個記錄,以及回溯到樹的頂部。
?
Kylin生態圈
?
?ETL: Extract-Transform-Load
用來描述將數據從來源端經過抽取(extract)、轉換(transform)、加載(load)至目的端的過程。
ETL一詞較常用在數據倉庫,但其對象并不限于數據倉庫。
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?