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