Apache Kylin是一個開源的分佈式分析引擎。徹底由eBay Inc.中國團隊開發git
並貢獻至開源社區。提供Hadoop之上的SQL查詢接口及多維分析(MOLAP)能力以
支持大規模數據能在亞秒內查詢巨大的Hive表(十億百億的海量數據)。
Apache Kylin社區發展
![](http://static.javashuo.com/static/loading.gif)
大數據分析面臨的挑戰
Huge volume data
Table scan
Big table joins
Data shuffling
Analysis on different granularity
Runtime aggregation expensive
Map Reduce job
Batch processing
High Concurrency
![](http://static.javashuo.com/static/loading.gif)
Kylin安裝
Centos 6.x
NTP
hadoop集羣
-v2.5
-HDFS
-MapReduce
HBase安裝
-v1.1.3
Hive安裝
-v1.2.1或者v2.0
Kylin
-v1.5.1 HBase1.1.3
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
Cube的構建
Segment
HBase的表
全量構建
增量構建
時間粒度能夠很小--準實時
達到閥值多個小Segment Merge成大的Segment
![](http://static.javashuo.com/static/loading.gif)
百度地圖應用的集羣
軟件環境:
CDH+Hive+HBase+Kylin0.71
硬件環境:
Kylin共四臺;
1臺master(100G內存)+3臺slaves(30G內存)
Kylin的展望
![](http://static.javashuo.com/static/loading.gif)
Apache Kylin 有多牛?
Apache Kylin 是一個開源的分佈式引擎,爲Hadoop等大型分佈式數據平臺之上的超大規模數據集經過標準SQL查詢及多維分析(OLAP)功能,提供壓秒級的交互式分析能力。
在如今的大數據時代,愈來愈多的企業開始使用Hadoop管理數據,可是現有的業務分析工具(如Tableau,Microstrategy等)往 往存在很大的侷限,如難以水平擴展、沒法處理超大規模數據、缺乏對Hadoop的支持;而利用Hadoop作數據分析依然存在諸多障礙,例如大多數分析師 只習慣使用SQL,Hadoop難以實現快速交互式查詢等等。神獸Apache Kylin就是爲了解決這些問題而設計的。
Apache Kylin,中文名麒(shen)麟(shou) 是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公司,力求更好地推進項目和社區的快速發展。
Kylin的基本原理和架構
Kylin的核心思想是預計算,即對多維分析可能用到的度量進行預計算,將計算好的結果保存成Cube,供查詢時直接訪問。把高複雜度的聚合運算、多表鏈接等操做轉換成對預計算結果的查詢,這決定了Kylin可以擁有很好的快速查詢和高併發能力。
![](http://static.javashuo.com/static/loading.gif)
說到Cube的構建,Kylin提供了一個稱做Layer Cubing的算法。簡單來講,就是按照
dimension數量從大到小的順序,從Base Cuboid開始,依次基於上一層Cuboid的結果進行再聚合。每一層的計算都是一個單獨的Map Reduce任務。
![](http://static.javashuo.com/static/loading.gif)
MapReduce的計算結果最終保存到HBase中,HBase中每行記錄的Rowkey由dimension組成,measure會保存在column family中。爲了減少存儲代價,這裏會對dimension和messure進行編碼。查詢階段,利用HBase列存儲的特性就能夠保證Kylin有良好的快速響應和高併發。
有了這些預計算的結果,當收到用戶的SQL請求,Kylin會對SQL作查詢計劃,並把本該進行的Join、Sum、Count Distinct等操做改寫成Cube的查詢操做。
Kylin提供了一個原生的Web界面,在這裏,用戶能夠方便的建立和設置Cube、管控Cube構建進度,並提供SQL查詢和基本的結果可視化。
根據公開數據顯示,Kylin的查詢性能不僅是針對個別的SQL,而是對上萬種SQL的平均表現,生產環境下90%file查詢可以在3s內返回。在上個月舉辦的Apache Kylin Meetup中,來自美團、京東、百度等互聯網公司分享了他們的使用狀況。例如在京東雲海的案例中,單個Cube最大有8個維度,最大數據條數4億,最大存儲空間800G,30個Cube共佔存儲空間4 T左右。查詢性能上,當QPS在50左右,全部查詢平均在200ms之內,當QPS在200左右,平均響應時間在1s之內。
目前,有愈來愈多的國內外公司將Kylin做爲大數據生產環境中的重要組件,如eBay、銀聯、百度、中國移動等。
Kylin的最新特性
Kylin的最新版本1.5.X引入了很多讓人期待的新功能,可擴展架構將Kylin的三大依賴(數據源、Cube引擎)完全解耦。Kylin將再也不直接依賴於Hadoop/HBase/Hive,而是把Kylin做爲一個可擴展的平臺暴露抽象接口,具體的實現以插件的方式指定所用的數據源、引擎和存儲。
開發者和用戶能夠經過定製開發,將Kylin接入除Hadoop/HBase/Hive之外的大數據系統,好比用kafka代替Hive做數據源,用Spark代替MR作計算引擎,用Cassandra代替HBase作存儲,都將變得更爲簡單。這也保證了Kylin能夠隨平臺技術一塊兒演進,緊跟技術潮流。
在Kylin1.5.x中還對HBase存儲結構進行了調整,將大的Cuboid分片存儲,將線性掃描改良爲並行掃描。基於上萬查詢進行了測試對比結果顯示,分片的存儲結構可以極大提速本來較慢的查詢5-10倍,但對本來較快的查詢提速不明顯,綜合起來平均提速2倍左右。
除此以外,1.5.x還引入了Fast cubing算法,利用Mapper端計算先完成大數據聚合,再將聚合後的結果交給Reducer,從而下降網絡瓶頸的壓力。對500多個Cube任務的實驗顯示,引入Fast cubing後,整體的Cube構建任務提速1.5倍。
kylin的用途
Apache Kylin旨在減小Hadoop在10億及百億規模以上數據級別的狀況下的查詢延遲,目前底層數據存儲基於HBase,具備較強的可伸縮性。Apache Kylin爲Hadoop數據提供了ANSI-SQL接口,而且支持大多數的ANSI-SQL的函數;可以支持在秒級別延遲的狀況下同Hadoop進行交互式查詢;支持多維聯機分析處理數據倉庫(MOLAP Cube);用戶可以定義數據模型;而且經過Apache Kylin可以預建超過10多億行原始記錄的數據模型;可與其餘BI工具無縫集成,包括Tableau,Excel,PowerBI等;並提供了JDBC,ODBC接口;可分佈式部署,Query Server能夠水平擴展,存儲基於HBase也能夠水平擴展。而且Apache Kylin將在後續版本支持流式近實時Cube計算,支持實時數據多維分析等各類場景。