全球視點(diǎn)!Kylin 基本原理及概念

2023-01-22 12:32:46 來(lái)源:51CTO博客

一、Kylin簡(jiǎn)介

Kylin的出現(xiàn)就是為了解決大數(shù)據(jù)系統(tǒng)中TB級(jí)別數(shù)據(jù)的數(shù)據(jù)分析需求,它提供Hadoop/Spark之上的SQL查詢接口及多維分析(OLAP)能力以支持超大規(guī)模數(shù)據(jù),它能在亞秒內(nèi)查詢巨大的Hive表。其核心是預(yù)計(jì)算,計(jì)算結(jié)果存在HBase中。


(資料圖片)

作為大數(shù)據(jù)分析神器,它也需要站在巨人的肩膀上,依賴HDFS、MapReduce/Spark、Hive/Kafka、HBase等服務(wù)。

二、Kylin優(yōu)勢(shì)

Kylin的主要優(yōu)勢(shì)為以下幾點(diǎn):

可擴(kuò)展超快OLAP引擎:Kylin是為減少在Hadoop/Spark上百億規(guī)模數(shù)據(jù)查詢延遲而設(shè)計(jì)Hadoop ANSI SQL接口:Kylin為Hadoop提供標(biāo)準(zhǔn)SQL支持大部分查詢功能交互式查詢能力:通過(guò)Kylin,用戶可以與Hadoop數(shù)據(jù)進(jìn)行亞秒級(jí)交互,在同樣的數(shù)據(jù)集上提供比Hive更好的性能多維立方體(MOLAP Cube):用戶能夠在Kylin里為百億以上數(shù)據(jù)集定義數(shù)據(jù)模型并構(gòu)建立方體與BI工具無(wú)縫整合:Kylin提供與BI工具的整合能力,如Tableau,PowerBI/Excel,MSTR,QlikSense,Hue和SuperSet其它特性:Job管理與監(jiān)控;壓縮與編碼;增量更新;利用HBase Coprocessor;基于HyperLogLog的Dinstinc Count近似算法;友好的web界面以管理,監(jiān)控和使用立方體;項(xiàng)目及表級(jí)別的訪問(wèn)控制安全;支持LDAP、SSO

正是有以上那么多的優(yōu)勢(shì)存在,也吸引了很多企業(yè)使用Kylin來(lái)分析數(shù)據(jù),如圖所示:

三、基本原理

Kylin的核心思想是預(yù)計(jì)算。

理論基礎(chǔ)是:以空間換時(shí)間。即多維分析可能用到的度量進(jìn)行預(yù)計(jì)算,將計(jì)算好的結(jié)果保存成Cube并存儲(chǔ)到HBase中,供查詢時(shí)直接訪問(wèn)。

大致流程:將數(shù)據(jù)源(比如Hive)中的數(shù)據(jù)按照指定的維度和指標(biāo),由計(jì)算引擎Mapreduce離線計(jì)算出所有可能的查詢結(jié)果(即Cube)存儲(chǔ)到HBase中。HBase中每行記錄的Rowkey由各維度的值拼接而成,度量會(huì)保存在column family中。為了減少存儲(chǔ)代價(jià),這里會(huì)對(duì)維度和度量進(jìn)行編碼。查詢階段,利用HBase列存儲(chǔ)的特性就可以保證Kylin有良好的快速響應(yīng)和高并發(fā)。如下圖所示:

四、架構(gòu)

如上圖所示,Kylin在架構(gòu)設(shè)計(jì)上,可大體分為四個(gè)部分:數(shù)據(jù)源,構(gòu)建Cube的計(jì)算引擎,存儲(chǔ)引擎,對(duì)外查詢接口。

其中數(shù)據(jù)源主要是Hive、Kafka;計(jì)算框架默認(rèn)為MapReduce,也支持Spark;結(jié)果存儲(chǔ)在HBase中;對(duì)外查詢接口支持REST API、JDBC、ODBC。

構(gòu)建Cube的計(jì)算引擎模塊如下:

1. REST Server

REST Server是一套面向應(yīng)用程序開(kāi)發(fā)的入口點(diǎn),旨在實(shí)現(xiàn)針對(duì)Kylin平臺(tái)的應(yīng)用開(kāi)發(fā)工作。此類應(yīng)用程序可以提供查詢、獲取結(jié)果、觸發(fā)cube構(gòu)建任務(wù)、獲取元數(shù)據(jù)以及獲取用戶權(quán)限等等。另外可以通過(guò)Restful接口實(shí)現(xiàn)SQL查詢。

2. 查詢引擎(Query Engine)

當(dāng)cube準(zhǔn)備就緒后,查詢引擎就能夠獲取并解析用戶查詢。它隨后會(huì)與系統(tǒng)中的其他組件進(jìn)行交互,從而向用戶返回對(duì)應(yīng)的結(jié)果。

3. Routing

負(fù)責(zé)將解析的SQL生成的執(zhí)行計(jì)劃轉(zhuǎn)換成cube緩存的查詢,cube是通過(guò)預(yù)計(jì)算緩存在HBase中,這部分查詢可以在秒級(jí)甚至毫秒級(jí)完成,還有一些操作使用過(guò)的原始數(shù)據(jù)(存儲(chǔ)在Hadoop的hdfs中通過(guò)hive查詢),這部分查詢延遲較高。

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

Kylin是一款元數(shù)據(jù)驅(qū)動(dòng)型應(yīng)用程序。元數(shù)據(jù)管理工具是一大關(guān)鍵性組件,用于對(duì)保存在Kylin當(dāng)中的所有元數(shù)據(jù)進(jìn)行管理,其中包括最為重要的cube元數(shù)據(jù),其它全部組建的正常運(yùn)作都需以元數(shù)據(jù)管理工具為基礎(chǔ),包括cube的定義、星狀模型的定義、job的信息、job的輸出信息、維度的directory信息等等,Kylin的元數(shù)據(jù)和cube都存儲(chǔ)在HBase中。

5. 任務(wù)引擎(Cube Build Engine)

這套引擎的設(shè)計(jì)目的在于處理所有離線任務(wù),其中包括shell腳本、Java API以及MapReduce任務(wù)等等。任務(wù)引擎對(duì)Kylin當(dāng)中的全部任務(wù)加以管理與協(xié)調(diào),從而確保每一項(xiàng)任務(wù)都能得到切實(shí)執(zhí)行并解決期間出現(xiàn)的障礙。

6. 存儲(chǔ)引擎(Storage Engine)

這套引擎負(fù)責(zé)管理底層存儲(chǔ),特別是cuboid,其以鍵值對(duì)的形式進(jìn)行保存。存儲(chǔ)引擎使用的是HBase,這是目前Hadoop生態(tài)系統(tǒng)當(dāng)中最理想的鍵值系統(tǒng)使用方案。Kylin還能夠通過(guò)擴(kuò)展實(shí)現(xiàn)對(duì)其它鍵值系統(tǒng)的支持,例如Redis。

五、基本概念

1. Table(表)

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

2. Model(模型)

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

3. Cube(立方體)

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

4. Cube Segments(立方體段)

它是立方體構(gòu)建(build)后的數(shù)據(jù)載體,一個(gè)segment映射HBase中的一張表。Cube實(shí)例構(gòu)建后,會(huì)產(chǎn)生一個(gè)新的Segment。一旦某個(gè)已經(jīng)構(gòu)建的Cube的原始數(shù)據(jù)發(fā)生變化,只需要刷新(fresh)變化的時(shí)間段所關(guān)聯(lián)的segment即可。

5. dimension (維度)

維度可以簡(jiǎn)單理解為觀察數(shù)據(jù)的角度,一般是一組離散的值。

6. Cardinality (維度的基數(shù))

指的是該維度在數(shù)據(jù)集中出現(xiàn)的不同值的個(gè)數(shù)。比如“城市”是一個(gè)維度,如果該維度下有2000個(gè)不同的值,那么該維度的基數(shù)就是2000。通常一個(gè)維度的基數(shù)會(huì)從幾十到幾萬(wàn)個(gè)不等,個(gè)別維度如id的基數(shù)會(huì)超過(guò)百萬(wàn)甚至千萬(wàn)。

基數(shù)超過(guò)一百萬(wàn)的維度通常被稱為超高基數(shù)維度(Ultra High Cardinality, UHC),需要引起設(shè)計(jì)者的注意。

友情提示:

Cube中所有維度的基數(shù)都可以體現(xiàn)出Cube的復(fù)雜度,如果一個(gè)Cube中有好幾個(gè)超高基數(shù)維度,那么這個(gè)Cube膨脹的概率就會(huì)很高。在創(chuàng)建Cube前需要對(duì)所有維度的基數(shù)做一個(gè)了解,這樣有助于設(shè)計(jì)合理的Cube。

計(jì)算基數(shù)有多種途徑,最簡(jiǎn)單的方法就是讓Hive執(zhí)行一個(gè)count distinct的SQL查詢。Kylin也提供了計(jì)算基數(shù)的方法,Kylin對(duì)基數(shù)的計(jì)算方法采用的是HyperLogLog的近似算法,與精確值略有誤差,但作為參考值已經(jīng)足夠了。

7. Measures(度量)

度量就是被聚合的統(tǒng)計(jì)值,也是聚合運(yùn)算的結(jié)果,一般指聚合函數(shù)(如:sum、count、average等)。比如學(xué)生成績(jī)、銷售額等。

度量主要用于分析或者評(píng)估,比如對(duì)趨勢(shì)的判斷,對(duì)業(yè)績(jī)或效果的評(píng)定等等。

8. Fact table(事實(shí)表)

事實(shí)表是指包含了大量不冗余數(shù)據(jù)的表,其列一般有兩種,分別為包含事實(shí)數(shù)據(jù)的列,包含維度f(wàn)oreign key的列。

9. Lookup table(查看表)

包含了對(duì)事實(shí)表的某些列擴(kuò)充說(shuō)明的字段。

10. Dimenssion Table(維表)

由Fact table和Lookup table抽象出來(lái)的表,包含了多個(gè)相關(guān)的列,以提供對(duì)數(shù)據(jù)不同維度的觀察,其中每列的值的數(shù)目稱為Cardinatily。

標(biāo)簽: 數(shù)據(jù)管理 應(yīng)用程序 近似算法

上一篇:天天熱消息:多表查詢與7種JOINS的實(shí)現(xiàn)
下一篇:環(huán)球快報(bào):一個(gè)Netflix開(kāi)發(fā)的微服務(wù)編排引擎,支持可視化工作流定義