Kylin大數據分析

1.概述

1.1 Kylin是什麼

    Apache Kylin(Extreme OLAP Engine for Big Data)是一個開源的分佈式分析引擎,爲Hadoop等大型分佈式數據平臺之上的超大規模數據集通過標準SQL查詢及多維分析(OLAP)功能,提供亞秒級的交互式分析能力。

1.2 Kylin的由來

    Apache Kylin,中文名麒麟,是Hadoop動物園的重要成員。Apache Kylin是一個開源的分佈式分析引擎,最初由eBay開發貢獻至開源社區。它提供Hadoop之上的SQL查詢接口及多維分析(OLAP)能力以支持大規模數據,能夠處理TB乃至PB級別的分析任務,能夠在亞秒級查詢巨大的Hive表,並支持高併發。
    Apache Kylin於2014年10月在github開源,並很快在2014年11月加入Apache孵化器,於2015年11月正式畢業成爲Apache頂級項目,也成爲首個完全由中國團隊設計開發的Apache頂級項目。於2016年3月,Apache Kylin核心開發成員創建了Kyligence公司,力求更好地推動項目和社區的快速發展。

1.3 爲什麼需要Kylin

    在大數據的背景下,Hadoop的出現解決了數據存儲問題,但如何對海量數據進行OLAP查詢,卻一直令人十分頭疼。
企業中大數據查詢大致分爲兩種:即席查詢和定製查詢。
① 即席查詢
    Hive、SparkSQL等OLAP引擎,雖然在很大程度上降低了數據分析的難度,但它們都只適用於即席查詢的場景。它們的優點是查詢靈活,但是隨着數據量和計算複雜度的增長,響應時間不能得到保證。
② 定製查詢
    多數情況下是對用戶的操作做出實時反應,Hive等查詢引擎很難滿足實時查詢,一般只能對數據倉庫中的數據進行提前計算,然後將結果存入Mysql等關係型數據庫,最後提供給用戶進行查詢。
    在上述背景下,Apache Kylin應運而生。不同於"大規模並行處理"Hive等架構,Apache Kylin採用"預計算"的模式,用戶只需要提前定義好查詢維度,Kylin將幫助我們進行計算,並將結果存儲到HBase中,爲海量數據的查詢和分析提供亞秒級返回,是一種典型的"空間換時間"的解決方案。Apache Kylin的出現不僅很好地解決了海量數據快速查詢的問題,也避免了手動開發和維護提前計算程序帶來的一系列麻煩。

2.核心概念

2.1 數據倉庫

    Data Warehouse,簡稱DW,中文名數據倉庫,是商業智能(BI)中的核心部分。主要是將不同數據源的數據整合到一起,通過多維分析等方式爲企業提供決策支持和報表生成。
數據倉庫與數據庫主要區別:用途不同
①、數據庫面向事務,而數據倉庫面向分析。
②、數據庫一般存儲在線的業務數據,需要對上層業務的改變做出實時反應,涉及到增刪查改等操作,所以需要遵循三大範式,需要ACID。而數據倉庫中存儲的則主要是歷史數據,主要目的是爲企業決策提供支持,所以可能存在大量數據冗餘,但利於多個維度查詢,爲決策者提供更多觀察視角。
    在傳統BI領域中,數據倉庫的數據同樣存儲在Oracle、MySQL等數據庫中,而在大數據領域中最常用的數據倉庫就是Apache Hive,Hive也是Apache Kylin默認的數據源。

2.2 OLAP與OLTP

    OLAP(Online Analytical Process),聯機分析處理,以多維度的方式分析數據,一般帶有主觀的查詢需求,多應用在數據倉庫。
    OLTP(Online Transaction Process),聯機事務處理,側重於數據庫的增刪查改等常用業務操作。

2.3 維度和度量

維度和度量是數據分析領域中兩個常用的概念。
簡單地說,維度就是觀察數據的角度。比如氣象站的採集數據,可以從時間的維度來觀察:
表格.jpg

也可以從時間和氣象站兩個角度來觀察:
1555654839(1).png

維度一般是離散的值,比如時間維度上的每一個獨立的日期,或者氣象站維度上的每一個獨立的氣象站ID。因此統計時可以把維度相同的記錄聚合在一起,然後應用聚合函數做累加、均值、最大值、最小值等聚合計算。
度量就是被聚合的統計值,也就是聚合運算的結果,它一般是連續的值,如以上兩個圖中的溫度值,或是其他測量點,比如風速、溼度、降雨量等等。通過對度量的比較和分析,我們就可以對數據做出評估,比如今年平均氣溫是否在正常範圍,某個氣象站的平均氣溫是否明顯高於往年平均氣溫等等。

2.4 Cube和Cuboid

確定好了維度和度量之後,然後根據定義好的維度和度量,我們就可以構建Cube。對於一個給定的數據模型,我們可以對其上的所有維度進行組合。對於N個維度來說,組合所有可能性共有2的N次方種。對於每一種維度的組合,將度量做聚合計算,然後將運算的結果保存爲一個物化視圖,稱爲Cuboid。所有維度組合的Cuboid作爲一個整體,被稱爲Cube。

1555655083(1).jpg

假設有一個電商的銷售數據集,其中維度包括時間(Time)、商品(Item)、地點(Location)和供應
商(Supplier),度量爲銷售額(GMV)。那麼所有維度的組合就有2的4次方,即16種。
 一維度(1D)的組合:有[Time]、[Item]、[Location]、[Supplier]4種。
 二維度(2D)的組合:有[Time Item]、[Time Location]、[Time Supplier]、[Item Location]、[Item Supplier]、[Location Supplier]6種。
 三維度(3D)的組合:有[Time Item Location][Item Location Supplier][Time Location Supplier][Time Item Supplier]4種。
 最後零維度(0D)和四維度(4D)的組合各有[]和[Time Item Location Supplier]1種。計算Cubiod,即按維度來聚合銷售額。如果用SQL語句來表達計算Cuboid [Time, Item],那麼SQL語句爲:select Time, Item, Sum(GMV) as GMV from Sales group by Time, Item將計算的結果保存爲物化視圖,所有Cuboid物化視圖的總稱就是Cube。

2.5 事實表和維度表

事實表(Fact Table)是指存儲有事實記錄的表,如系統日誌、銷售記錄、用戶訪問記錄等。事實表的記錄是動態增長的,所以它的體積通常遠大於維度表。
維度表(Dimension Table)或維表,也稱爲查找表(Lookup Table),是與事實表相對應的一種表。它保存了維度的屬性值,可以跟事實表做關聯;相當於將事實表上經常重複的屬性抽取、規範出來用一張表進行管理。常見的維度表有:日期表(存儲與日期對應的周、月、季度等屬性)、地區表(包含國家、省/州、城市等屬性)等。維度表的變化通常不會太大。
使用維度表有許多好處:
①、縮小了事實表的大小。
②、便於維度的管理和維護,增加、刪除和修改維度的屬性,不必對事實表的大量記錄進行改動。
③、 維度表可以爲多個事實表重用。

2.6 星形模型

維度建模通常又分爲星型模型、雪花模型
星形模型(Star Schema)是數據挖掘中常用的幾種多維數據模型之一。它的特點是隻有一張事實表,以及零到多個維度表,事實表與維度表通過主外鍵相關聯,維度表之間沒有關聯,就像許多小星星圍繞在一顆恆星周圍,所以名爲星形模型。

1555655396(1).png

雪花模型(SnowFlake Schema),就是將星形模型中的某些維表抽取成更細粒度的維表,然後讓維表之間也進行關聯,這種形狀酷似雪花的的模型稱爲雪花模型
1555655496(1).png

3.運行原理

Kylin的核心思想是預計算,即對多維分析可能用到的度量進行預計算,將計算好的結果保存成Cube,供查詢時直接訪問。把高複雜度的聚合運算、多表連接等操作轉換成對預計算結果的查詢,這決定了Kylin能夠擁有很好的快速查詢和高併發能力。

3.1 技術架構

Apache Kylin系統主要可以分爲在線查詢和離線構建兩部分,具體架構圖如下:

1555655661(1).png

Kylin提供了一個稱作Layer Cubing的算法,來構建Cube。簡單來說,就是按照dimension數量從大到小的順序,從Base Cuboid開始,依次基於上一層Cuboid的結果進行再聚合。每一層的計算都是一個單獨的Map Reduce(Spark)任務。
MapReduce的計算結果最終保存到HBase中,HBase中每行記錄的Rowkey由dimension組成,
measure會保存在column family中。爲了減小存儲代價,這裏會對dimension和measure進行編碼。查詢階段,利用HBase列存儲的特性就可以保證Kylin有良好的快速響應和高併發。

3.2 特性

SQL接口

 Kylin主要的對外接口就是以SQL的形式提供的。SQL簡單易用的特性極大地降低了Kylin的學習成本,不論是數據分析師還是Web開發程序員都能從中收益。

支持海量數據集

 不論是Hive、SparkSQL,還是Impala,它們的查詢時間都隨着數據量的增長而線性增長。而Apache Kylin使用預計算技術打破了這一點。Kylin在數據集規模上的侷限性主要取決於維度的個數和基數,而不是數據集的大小,所以Kylin能更好地支持海量數據集的查詢。

亞秒級響應

 受益於預計算技術,Kylin的查詢速度非常快,因爲複雜的連接、聚合等操作都在Cube的構建過程中已經完成了。    

水平擴展

Apache Kylin同樣可以使用集羣部署方式進行水平擴展。但部署多個節點只能提高Kylin處理查詢的能力,而不能提升它的預計算能力。

可視化集成

Kylin提供與BI工具的整合能力,如Tableau,PowerBI/Excel,MSTR,QlikSense,Hue和SuperSet。

構建多維立方體(Cube)

用戶能夠在Kylin裏爲百億以上數據集定義數據模型並構建立方體。

4.Kylin服務器模式

Kylin 實例是無狀態的,其運行時狀態存儲在 HBase (由 conf/kylin.properties 中的 kylin.metadata.url 指定) 中的 metadata 中。出於負載均衡的考慮,建議運行多個Kylin 實例共享一個 metadata ,因此他們在表結構中共享同一個狀態,比如job 狀態, Cube 狀態, 等等。
每一個 Kylin 實例在 conf/kylin.properties 中都有一個 “kylin.server.mode” entry,指定了運行時的模式,有 3 個選項:

job : 在實例中運行 job engine; Kylin job engine 管理集羣 的 jobs。
query : 只運行 query engine; Kylin query engine 接收和迴應你的 SQL 查詢。
all : 在實例中既運行 job engine 也運行 query engines。

注意默認情況下只有一個實例可以運行 job engine (“all” 或 “job” 模式), 其它需要是 “query” 模式

5. 企業應用案例

Apache Kylin雖然還很年輕,但已經在多個企業的生產項目中得到了應用。下面我們來看一看Kylin在國內兩個著名企業內的應用。
百度地圖
大數據計算分析的三大痛點:

1.百億級海量數據多維指標動態計算耗時問題,Apache Kylin通過預計算生成Cube結果數據集並存儲到HBase的方式解決;
2.複雜條件篩選問題,用戶查詢時,Apache Kylin利用router查找算法及優化的HBase Coprocessor解決;
3.跨月、季度、年等大時間區間查詢問題,對於預計算結果的存儲,Apache Kylin利用Cube的Data Segment分區存儲管理解決。

這3個痛點的解決,使百度地圖在百億級大數據規模下,且數據模型確定的具體多維分析產品中,達到單條SQL毫秒級響應。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章