自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Apache Kylin 歷險(xiǎn)記

開源
Apache Kylin(麒麟)是一個(gè)開源的分布式分析引擎,提供Hadoop/Spark之上的SQL查詢接口及多維分析(OLAP)能力以支持超大規(guī)模數(shù)據(jù),最初由eBay Inc開發(fā)并貢獻(xiàn)至開源社區(qū)。它能在亞秒內(nèi)查詢巨大的Hive表。

1. Kylin 概述

1.1 Kylin 定義

Apache Kylin(麒麟)是一個(gè)開源的分布式分析引擎,提供Hadoop/Spark之上的SQL查詢接口及多維分析(OLAP)能力以支持超大規(guī)模數(shù)據(jù),最初由eBay Inc開發(fā)并貢獻(xiàn)至開源社區(qū)。它能在亞秒內(nèi)查詢巨大的Hive表。

官網(wǎng):https://kylin.apache.org/cn

1.2 Kylin特點(diǎn)

Kylin的主要特點(diǎn)包括支持SQL接口、支持超大規(guī)模數(shù)據(jù)集、亞秒級(jí)響應(yīng)、可伸縮性、高吞吐率、BI工具集成等。

  • 標(biāo)準(zhǔn)SQL接口:Kylin是以標(biāo)準(zhǔn)的SQL作為對(duì)外服務(wù)的接口。
  • 支持超大數(shù)據(jù)集:Kylin對(duì)于大數(shù)據(jù)的支撐能力可能是目前所有技術(shù)中最為領(lǐng)先的。早在2015年eBay的生產(chǎn)環(huán)境中就能支持百億記錄的秒級(jí)查詢,之后在移動(dòng)的應(yīng)用場景中又有了千億記錄秒級(jí)查詢的案例。
  • 亞秒級(jí)響應(yīng):Kylin擁有優(yōu)異的查詢相應(yīng)速度,這點(diǎn)得益于預(yù)計(jì)算,很多復(fù)雜的計(jì)算,比如連接、聚合,在離線的預(yù)計(jì)算過程中就已經(jīng)完成,這大大降低了查詢時(shí)刻所需的計(jì)算量,提高了響應(yīng)速度。
  • 可伸縮性和高吞吐率:單節(jié)點(diǎn)Kylin可實(shí)現(xiàn)每秒70個(gè)查詢,還可以搭建Kylin的集群。
  • BI工具集成,Kylin可以與現(xiàn)有的BI工具集成,具體包括如下內(nèi)容。

ODBC:與Tableau、Excel、PowerBI等工具集成ODBC:與Tableau、Excel、PowerBI等工具集成

JDBC:與Saiku、BIRT等Java工具集成

RestAPI:與JavaScript、Web網(wǎng)頁集成

Kylin開發(fā)團(tuán)隊(duì)還貢獻(xiàn)了Zepplin的插件,也可以使用Zepplin來訪問Kylin服務(wù)。

1.3 預(yù)備知識(shí)

1.3.1 Data Warehouse(數(shù)據(jù)倉庫)

數(shù)據(jù)倉庫是一個(gè)各種數(shù)據(jù) (包括歷史數(shù)據(jù)和當(dāng)前數(shù)據(jù))的中心存儲(chǔ)系統(tǒng),是 BI (business intelligence ,商業(yè)智能) 的核心部件。

1.3.2 事實(shí)表 & 維表

在維度建模中,將度量稱為“事實(shí)” ,將環(huán)境描述為“維度”。維度是用于分析事實(shí)所需要的多樣環(huán)境。例如,在分析交易過程時(shí),可以通過買家、賣家、商品和時(shí)間等維度描述交易發(fā)生的環(huán)境。事實(shí)則緊緊圍繞著業(yè)務(wù)過程來設(shè)計(jì),通過獲取描述業(yè)務(wù)過程的度量來表達(dá)業(yè)務(wù)過程,包含了引用的維度和與業(yè)務(wù)過程有關(guān)的度量。例如訂單作為交易行為的核心載體,直觀反映了交易的狀況。訂單的流轉(zhuǎn)會(huì)產(chǎn)生很多業(yè)務(wù)過程,而下單、支付和成功完結(jié)三個(gè)業(yè)務(wù)過程是整個(gè)訂單的關(guān)鍵節(jié)點(diǎn)。獲取這三個(gè)業(yè)務(wù)過程的筆數(shù)、金額以及轉(zhuǎn)化率是日常數(shù)據(jù)統(tǒng)計(jì)分析的重點(diǎn),事務(wù)事實(shí)表設(shè)計(jì)可以很好地滿足這個(gè)需求。

1.3.3 維度

即觀察數(shù)據(jù)的角度。比如員工數(shù)據(jù),可以從性別角度來分析,也可以更加細(xì)化,從入職時(shí)間或者地區(qū)的維度來觀察。維度是一組離散的值,比如說性別中的男和女,或者時(shí)間維度上的每一個(gè)獨(dú)立的日期。因此在統(tǒng)計(jì)時(shí)可以將維度值相同的記錄聚合在一起,然后應(yīng)用聚合函數(shù)做累加、平均、最大和最小值等聚合計(jì)算。

1.3.4 度量

即被聚合(觀察)的統(tǒng)計(jì)值,也就是聚合運(yùn)算的結(jié)果。比如說員工數(shù)據(jù)中不同性別員工的人數(shù),又或者說在同一年入職的員工有多少。

1.3.5 Business Intelligence (商業(yè)職能)

商業(yè)智能通常被理解為將企業(yè)中現(xiàn)有的數(shù)據(jù) 轉(zhuǎn)化為知識(shí),幫助企業(yè)做出明智的業(yè)務(wù)經(jīng)營決策的工具。為了將數(shù)據(jù)轉(zhuǎn)化為知識(shí),需要利用數(shù)據(jù)倉庫 、聯(lián)機(jī)分析處理( OLAP )工具和數(shù)據(jù)挖掘等技術(shù)。

1.3.6 OLAP(online analytical processing)

OLAP是一種軟件技術(shù),它使分析人員能夠迅速、一致、交互地 從各個(gè)方面觀察信息 ,以達(dá)到深入理解數(shù)據(jù)的目的。從各方面觀察信息,也就是從不同的維度分析數(shù)據(jù),因此 OLAP 也成為 多維分析。

1.3.7 ROLAP & MOLAP

ROLAP : 基于關(guān)系型數(shù)據(jù)庫,不需要預(yù)計(jì)算。

MOLAP:基于多維數(shù)據(jù)集(一個(gè)多維數(shù)據(jù)集稱為一個(gè)OLAP Cube),需要預(yù)計(jì)算。

1.3.8 Cube & Cubeid

有了維度跟度量后就有了根據(jù)維度和度量做預(yù)計(jì)算的Cube理論。給定一個(gè)數(shù)據(jù)模型,我們可以對(duì)其上的所有維度進(jìn)行聚合,對(duì)于N個(gè)維度來說,組合的所有可能性共有2n種。對(duì)于每一種維度的組合,將度量值做聚合計(jì)算,然后將結(jié)果保存為一個(gè)物化視圖,稱為Cuboid。所有維度組合的Cuboid作為一個(gè)整體,稱為Cube。

1.3.9 星型模型

當(dāng)所有維表都直接連接到事實(shí)表上時(shí),整個(gè)圖解就像星星一樣,故將該模型稱為星型模型。該模型通過大量的冗余來提升查詢效率,對(duì)OLAP場景較友好。

當(dāng)有一個(gè)或多個(gè)維表沒有直接連接到事實(shí)表上,而是通過其他維度表連接到事實(shí)表上時(shí),其圖解就像多個(gè)雪花連接在一起,故稱雪花模型。該模型在MySQL、Oracle中常見。

當(dāng)有一個(gè)或多個(gè)維表沒有直接連接到事實(shí)表上,而是通過其他維度表連接到事實(shí)表上時(shí),其圖解就像多個(gè)雪花連接在一起,故稱雪花模型。該模型在MySQL、Oracle中常見。

星型模型 VS 雪花模型

2 Kylin架構(gòu)

2.1 核心架構(gòu)

Kylin官方架構(gòu)圖

2.1.1 REST Server

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

2.1.2 查詢引擎(Query Engine)

當(dāng)Cube準(zhǔn)備就緒后,查詢引擎就能夠獲取并解析用戶查詢。它隨后會(huì)與系統(tǒng)中的其它組件進(jìn)行交互,從而向用戶返回對(duì)應(yīng)的結(jié)果。查詢SQL轉(zhuǎn)化為底層任務(wù), 數(shù)據(jù)存儲(chǔ)到HBase。

2.1.3 Routing

負(fù)責(zé)將解析的SQL生成的執(zhí)行計(jì)劃轉(zhuǎn)換成Cube緩存的查詢,Cube是通過預(yù)計(jì)算緩存在hbase中,這部分查詢可以在秒級(jí)設(shè)置毫秒級(jí)完成,而且還有一些操作使用過的查詢?cè)紨?shù)據(jù)(存儲(chǔ)在Hadoop的HDFS中通過Hive查詢)。這部分查詢延遲較高(為避免查詢?cè)紨?shù)據(jù),默認(rèn)關(guān)閉)。

2.1.4 元數(shù)據(jù)管理工具(Metadata)

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ǔ)。Kylin的元數(shù)據(jù)存儲(chǔ)在Hbase中。

2.1.5 任務(wù)引擎(Cube Build Engine)

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

2.2 核心算法

2.2.1 工作原理

Kylin的工作原理就是對(duì)數(shù)據(jù)模型做Cube預(yù)計(jì)算,并利用計(jì)算的結(jié)果加速查詢:

  • 指定數(shù)據(jù)模型,定義維度和度量;
  • 預(yù)計(jì)算Cube,計(jì)算所有Cuboid并保存為物化視圖,預(yù)計(jì)算過程是Kylin從Hive中讀取原始數(shù)據(jù),按照我們選定的維度進(jìn)行計(jì)算,并將結(jié)果集保存到Hbase中,默認(rèn)的計(jì)算引擎為MapReduce,可以選擇Spark作為計(jì)算引擎。一次build的結(jié)果,我們稱為一個(gè)Segment。構(gòu)建過程中會(huì)涉及多個(gè)Cuboid的創(chuàng)建,具體創(chuàng)建過程由kylin.Cube.algorithm參數(shù)決定,參數(shù)值可選 auto,layer 和 inmem, 默認(rèn)值為 auto,即 Kylin 會(huì)通過采集數(shù)據(jù)動(dòng)態(tài)地選擇一個(gè)算法 (layer or inmem),如果用戶很了解 Kylin 和自身的數(shù)據(jù)、集群,可以直接設(shè)置喜歡的算法。
  • 執(zhí)行查詢,讀取Cuboid,運(yùn)行,產(chǎn)生查詢結(jié)果。

2.2.2 構(gòu)建方法

主要有逐層構(gòu)建算法、快速構(gòu)建算法 兩種。

2.2.2.1 逐層構(gòu)建算法(layer)

一個(gè)N維的Cube,是由1個(gè)N維子立方體、N個(gè)(N-1)維子立方體、N*(N-1)/2個(gè)(N-2)維子立方體、……、N個(gè)1維子立方體和1個(gè)0維子立方體構(gòu)成,總共有2^N個(gè)子立方體組成,在逐層算法中,按維度數(shù)逐層減少來計(jì)算,每個(gè)層級(jí)的計(jì)算(除了第一層,它是從原始數(shù)據(jù)聚合而來),是基于它上一層級(jí)的結(jié)果來計(jì)算的。比如,[Group by A, B]的結(jié)果,可以基于[Group by A, B, C]的結(jié)果,通過去掉C后聚合得來的;這樣可以減少重復(fù)計(jì)算;當(dāng) 0維度Cuboid計(jì)算出來的時(shí)候,整個(gè)Cube的計(jì)算也就完成了。

每一輪的計(jì)算都是一個(gè)MapReduce任務(wù),且串行執(zhí)行;一個(gè)N維的Cube,至少需要N+1次MapReduce Job。

算法優(yōu)點(diǎn):

  • 此算法充分利用了MapReduce的能力,處理了中間復(fù)雜的排序和洗牌工作,故而算法代碼清晰簡單,易于維護(hù);
  • 受益于Hadoop的日趨成熟,此算法對(duì)集群要求低,運(yùn)行穩(wěn)定;在內(nèi)部維護(hù)Kylin的過程中,很少遇到在這幾步出錯(cuò)的情況;即便是在Hadoop集群比較繁忙的時(shí)候,任務(wù)也能完成。

算法缺點(diǎn):

  • 當(dāng)Cube有比較多維度的時(shí)候,所需要的MapReduce任務(wù)也相應(yīng)增加;由于Hadoop的任務(wù)調(diào)度需要耗費(fèi)額外資源,特別是集群較龐大的時(shí)候,反復(fù)遞交任務(wù)造成的額外開銷會(huì)相當(dāng)可觀;
  • 此算法會(huì)對(duì)Hadoop MapReduce輸出較多數(shù)據(jù); 雖然已經(jīng)使用了Combiner來減少從Mapper端到Reducer端的數(shù)據(jù)傳輸,所有數(shù)據(jù)依然需要通過Hadoop MapReduce來排序和組合才能被聚合,無形之中增加了集群的壓力;
  • 對(duì)HDFS的讀寫操作較多:由于每一層計(jì)算的輸出會(huì)用做下一層計(jì)算的輸入,這些Key-Value需要寫到HDFS上;當(dāng)所有計(jì)算都完成后,Kylin還需要額外的一輪任務(wù)將這些文件轉(zhuǎn)成HBase的HFile格式,以導(dǎo)入到HBase中去;總體而言,該算法的效率較低,尤其是當(dāng)Cube維度數(shù)較大的時(shí)候。

2.2.2.2 快速構(gòu)建算法(inmem)

快速構(gòu)建算法也被稱作“逐段”(By Segment) 或“逐塊”(By Split) 算法,從1.5.x開始引入該算法,利用Mapper端計(jì)算先完成大部分聚合,再將聚合后的結(jié)果交給Reducer,從而降低對(duì)網(wǎng)絡(luò)瓶頸的壓力。該算法的主要思想是,對(duì)Mapper所分配的數(shù)據(jù)塊,將它計(jì)算成一個(gè)完整的小Cube 段(包含所有Cuboid);每個(gè)Mapper將計(jì)算完的Cube段輸出給Reducer做合并,生成大Cube,也就是最終結(jié)果;如圖所示解釋了此流程。

快速Cube算法

與舊算法相比,快速算法主要有兩點(diǎn)不同。

  • Mapper會(huì)利用內(nèi)存做預(yù)聚合,算出所有組合;Mapper輸出的每個(gè)Key都是不同的,這樣會(huì)減少輸出到Hadoop MapReduce的數(shù)據(jù)量;
  • 一輪MapReduce便會(huì)完成所有層次的計(jì)算,減少Hadoop任務(wù)的調(diào)配,所以如果機(jī)器性能不錯(cuò)推薦用此種方法。

2.2.3 Cube存儲(chǔ)原理

假設(shè)維度字典表具體信息如下。

字典表信息

加入我們選擇了 address、catogory、date為維度進(jìn)行Cube聚合。我們需要知道Cube底層是如何預(yù)聚合后把數(shù)據(jù)存儲(chǔ)到HBase中的。

Cube存儲(chǔ)

系統(tǒng)會(huì)按照所有的維度選跟不選做01映射,然后每個(gè)維度選了后也有對(duì)應(yīng)的維度值做映射。此時(shí) key = Cubeid + 緯度值, value = 對(duì)應(yīng)預(yù)聚合結(jié)果。

2.3 Kylin入手

2.3.1 Kylin 安裝

Kylin 是依賴于Hadoop、HBase、Zookeeper、Spark的,所以安裝時(shí)需確保所有的前置依賴是OK的。至于安裝細(xì)節(jié),找個(gè)百度教程即可。

2.3.2 數(shù)據(jù)準(zhǔn)備

在Kylin安裝完畢后,需要構(gòu)建數(shù)據(jù)源、創(chuàng)建Model、創(chuàng)建Cube等操作,都是一些常規(guī)操作,沒啥說的。創(chuàng)建模型時(shí)整體有點(diǎn)類似PowerBI,需要選擇表Join的方式跟字段,選擇事實(shí)表跟維度的指標(biāo)跟維度。

2.4 注意事項(xiàng)

因?yàn)镽outing默認(rèn)關(guān)閉,為了保證OLAP查詢的性能穩(wěn)定,不會(huì)出現(xiàn)忽快忽慢的場景,有如下個(gè)約束條件。

2.4.1 只能按照構(gòu)建 Model的連接條件來寫 SQL

創(chuàng)建時(shí)候如果是A join B,則查詢時(shí)也只能這樣查詢。

2.4.2 只能按照構(gòu)建 Cube時(shí)選擇的維度字段分組統(tǒng)計(jì)

如果我們選擇了4個(gè)維度,則在進(jìn)行OLAP查詢時(shí)候也只能選擇這個(gè)四個(gè)維度進(jìn)行g(shù)roupBy。

2.4.3 只能統(tǒng)計(jì)構(gòu)建 Cube時(shí)選擇的度量值字段

如果在構(gòu)建Cube時(shí),只添加兩個(gè)指標(biāo),則查詢時(shí)候也只能查詢這倆。別的都不能查詢。

3. Cube 構(gòu)建優(yōu)化

3.1 使用衍生維度

衍生維度用于在有效維度內(nèi)將維度表上的非主鍵維度排除掉,并使用維度表的主鍵(其

實(shí)是事實(shí)表上相應(yīng)的外鍵)來替代它們。Kylin 會(huì)在底層記錄維度表主鍵與維度表其他維度之間的映射關(guān)系,以便在查詢時(shí)能夠動(dòng)態(tài)地將維度表的主鍵“翻譯”成這些非主鍵維度,并進(jìn)行實(shí)時(shí)聚合,(一般不建議開,可能會(huì)導(dǎo)致查詢耗時(shí)變大)。

衍生維度

3.2 使用聚合組(Aggregation Group)

聚合組就是一個(gè)強(qiáng)大的剪枝工具,通過指定不同的剪枝策略可以縮小維度組合個(gè)數(shù)。

3.2.1 強(qiáng)制維度

強(qiáng)制維度

強(qiáng)制維度(Mandatory),如果一個(gè)維度被定義為強(qiáng)制維度,分組后的維度組合結(jié)果一定要包含該維度,但是強(qiáng)制維度不能自己出現(xiàn)。

3.2.2 層級(jí)維度

層級(jí)維度

如果指定了維度直接的依賴關(guān)系,比如 維度A(年) -> 維度B(月)。維度B不能單獨(dú)出現(xiàn),必須B想出現(xiàn)的話必須有A。

3.2.3 聯(lián)合維度

聯(lián)合維度

每個(gè)聯(lián)合中包含兩個(gè)或更多個(gè)維度,如果某些列形成一個(gè)聯(lián)合,那么在該分組產(chǎn)生的任何Cuboid中,這些聯(lián)合維度要么一起出現(xiàn),要么都不出現(xiàn)。

3.3 Row Key 優(yōu)化Kylin 會(huì)把所有的維度按照順序組合成一個(gè)完整的Rowkey,并且按照這個(gè)Rowkey 升序

排列Cuboid 中所有的行。設(shè)計(jì)良好的Rowkey 將更有效地完成數(shù)據(jù)的查詢過濾和定位,減少IO 次數(shù),提高查詢速度,維度在rowkey 中的次序,對(duì)查詢性能有顯著的影響。

3.3.1 被過濾的維度放在前面

如果A的枚舉值是1、2、3、4。B的枚舉值a、b、c、d。

過濾

3.3.2 基數(shù)打的維度放在基數(shù)小的維度前面

如下,想生成AB的結(jié)果,則可從ABC、ABD中出結(jié)果(ABD結(jié)果行數(shù)更少),因?yàn)閗ylin系統(tǒng)默認(rèn)選擇cubeid小的,所以基數(shù)打的維度盡量前調(diào)。

由三個(gè)維度生成兩個(gè)維度

4. 參考

Kylin : https://www.bilibili.com/video/BV1QU4y1F7QH?p=19

責(zé)任編輯:武曉燕 來源: sowhat1412
相關(guān)推薦

2022-05-05 19:26:17

Druid分布式存儲(chǔ)

2009-10-15 09:21:00

CCNA考試歷險(xiǎn)記CCNA

2021-02-22 08:20:32

Activity動(dòng)畫界面

2011-09-16 16:05:10

MySQL

2011-01-26 10:05:36

Git安裝配置

2011-03-18 09:35:39

GitLinux版本控制

2014-04-01 09:13:23

程序員招聘

2011-01-26 09:09:06

版本控制系統(tǒng)GitLinux

2011-03-30 10:50:55

GitLinux 版本控制

2011-02-28 14:37:43

GitLinux版本控制

2017-06-30 17:54:04

2023-02-03 14:24:15

Wine 8.1Windows

2009-02-01 14:39:10

面試網(wǎng)絡(luò)工程師英國

2016-11-15 09:34:14

Apache Kyli流處理引擎

2017-05-03 08:32:22

Apache KyliCube設(shè)置

2017-01-15 14:27:32

大數(shù)據(jù)美團(tuán)點(diǎn)評(píng)技術(shù)

2017-04-11 09:33:55

Apache Kyli優(yōu)化聚合組

2012-08-08 10:04:41

IBM但W

2019-07-22 09:35:23

RedisSentinel

2017-05-11 10:44:19

Apache KyliCount_Disti字符串
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)