{eval=Array;=+count(Array);}
Kylin的背景
Kylin 是一個(gè)Hadoop生態(tài)圈下的MOLAP系統(tǒng),是ebay大數(shù)據(jù)部門從2014年開(kāi)始研發(fā)的支持TB到PB級(jí)別數(shù)據(jù)量的分布式Olap分析引擎。其特點(diǎn)包括:
可擴(kuò)展的超快的OLAP引擎
提供ANSI-SQL接口
交互式查詢能力
MOLAP Cube 的概念
與BI工具可無(wú)縫整合
Kylin典型的應(yīng)用場(chǎng)景如下:
用戶數(shù)據(jù)存在于Hadoop HDFS中,利用Hive將HDFS文件數(shù)據(jù)以關(guān)系數(shù)據(jù)方式存取,數(shù)據(jù)量巨大,在500G以上
每天有數(shù)G甚至數(shù)十G的數(shù)據(jù)增量導(dǎo)入
有10個(gè)左右為固定的分析維度
Kylin的核心思想是利用空間換時(shí)間,由于查詢方面制定了多種靈活的策略,進(jìn)一步提高空間的利用率,使得這樣的平衡策略在應(yīng)用中是值得采用的。
kylin的總體架構(gòu)
Kylin 作為一個(gè)Olap引擎完成了從數(shù)據(jù)源抓取數(shù)據(jù),ETL到自己的存儲(chǔ)引擎,提供REST服務(wù)等一系列工作,其架構(gòu)如圖所示:
Kylin 大數(shù)據(jù)時(shí)代的OLAP利器
Kylin 的生態(tài)圈包括:
Kylin Core: Kylin 引擎的框架,查詢、任務(wù)、以及存儲(chǔ)引擎都集中于此,除此之外還包括一個(gè)REST 服務(wù)器來(lái)響應(yīng)各種客戶端請(qǐng)求。
擴(kuò)展插件: 各種提供額外特性的插件,如安全認(rèn)證、SSO等
完整性組件: Job管理器,ETL、監(jiān)控以及報(bào)警
交互界面: 基于Kylin Core之上的用戶交互界面
驅(qū)動(dòng): 提供了JDBC以及ODBC的連接方式
kylin Cube 多維數(shù)據(jù)的計(jì)算
Kylin的多維計(jì)算主要是體現(xiàn)在OLAP Cube的計(jì)算。Cube由多個(gè)Cuboid組合而成,Cuboid上的數(shù)據(jù)是原始數(shù)據(jù)聚合的數(shù)據(jù),因此創(chuàng)建Cube可以看作是在原始數(shù)據(jù)導(dǎo)入時(shí)做的一個(gè)預(yù)計(jì)算預(yù)處理的過(guò)程。Kylin的強(qiáng)大之處在于充分利用了Hadoop的MapReduce并行處理的能力,高效處理導(dǎo)入的數(shù)據(jù)。
Kylin的數(shù)據(jù)來(lái)自于Hive,并作為一個(gè)Hive的加速器希望最終的查詢SQL類似于直接在Hive上查詢。因此Kylin在建立Cube的時(shí)候需要從Hive獲取Hive表的元數(shù)據(jù)。雖然有建立Cube的過(guò)程,但是并不想對(duì)普通的查詢用戶暴露Cube的存在。
Kylin創(chuàng)建Cube的過(guò)程如下圖所示:
Kylin 大數(shù)據(jù)時(shí)代的OLAP利器
根據(jù)Cube定義的事實(shí)表以及維度表,利用Hive創(chuàng)建一張寬表
抽取事實(shí)表上的維度的distinct值,將事實(shí)表上的維度以字典樹(shù)方式壓縮編碼成目錄,將維度表以字典樹(shù)的方式編碼
利用MapReduce從第一步得到的寬表文件作為輸入,創(chuàng)建 N-Dimension cuboid,然后每次根據(jù)前一步的結(jié)果串行生成 N-1 cuboid, N-2 cuboid … 0-Cuboid
根據(jù)生成的Cuboid數(shù)據(jù)量計(jì)算HTable的Region分割策略,創(chuàng)建HTable,將HFile導(dǎo)入進(jìn)來(lái)
Kylin與傳統(tǒng)的OLAP一樣,無(wú)法應(yīng)對(duì)數(shù)據(jù)Update的情況(更新數(shù)據(jù)會(huì)導(dǎo)致Cube的失效,需要重建整個(gè)Cube)。面對(duì)每天甚至每?jī)蓚€(gè)小時(shí)這樣固定周期的增量數(shù)據(jù),Kylin使用了一種增量Cubing技術(shù)來(lái)進(jìn)行快速響應(yīng)。
Kylin的Cube可以根據(jù)時(shí)間段劃分成多個(gè)Segment。在Cube第一次Build完成之后會(huì)有一個(gè)Segment,在每次增量Build后會(huì)產(chǎn)生一個(gè)新的Segment。增量Cubing依賴已有的Cube Segments和增量的原始數(shù)據(jù)。增量Cubing的步驟和新建 Cube的步驟類似,Segment之間以時(shí)間段進(jìn)行區(qū)分。
增量Cubing所需要面對(duì)的原始數(shù)據(jù)量更小,因此增量Cubing的速度是非常快的。然而隨著Cube Segments的數(shù)目增加,一定程度上會(huì)影響到查詢的進(jìn)行,所以在Segments數(shù)目到一定數(shù)量后可能需要進(jìn)行Cube Segments的合并操作,實(shí)際上merge cube是合成了一個(gè)新的大的Cube Segment來(lái)替代,Merge操作是一個(gè)異步的在線操作,不會(huì)對(duì)前端的查詢業(yè)務(wù)產(chǎn)生影響。。
0
回答0
回答0
回答0
回答3
回答0
回答0
回答0
回答0
回答0
回答