首先來(lái)看離線構(gòu)建部分肛著。從圖中可以看出,左側(cè)為數(shù)據(jù)源跺讯,目前Kylin默認(rèn)的數(shù)據(jù)源是Apache Hive枢贿,保存著待分析的用戶數(shù)據(jù)。根據(jù)元數(shù)據(jù)的定義刀脏,構(gòu)建引擎從數(shù)據(jù)源抽取數(shù)據(jù)局荚,并構(gòu)建Cube。數(shù)據(jù)以關(guān)系表的形式輸入愈污,并且必須符合星形模型耀态。構(gòu)建技術(shù)主要為MapReduce(Spark目前在beta版本)。構(gòu)建后的Cube保存在右側(cè)存儲(chǔ)引擎中暂雹,目前Kylin默認(rèn)的存儲(chǔ)為Apache HBase首装。
完成離線構(gòu)建后,用戶可以從上方的查詢系統(tǒng)發(fā)送SQL進(jìn)行查詢分析杭跪。Kylin提供了RESTful API仙逻、JDBC/ODBC接口供用戶調(diào)用。無(wú)論從哪個(gè)接口進(jìn)入揍魂,SQL最終都會(huì)來(lái)到REST服務(wù)層桨醋,再轉(zhuǎn)交給查詢引擎進(jìn)行處理。查詢引擎解析SQL现斋,生成基于關(guān)系表的邏輯執(zhí)行計(jì)劃喜最,然后將其轉(zhuǎn)譯為基于Cube的物理執(zhí)行計(jì)劃,最后查詢預(yù)計(jì)算生成的Cube并產(chǎn)生結(jié)果庄蹋。整個(gè)過(guò)程不會(huì)訪問(wèn)原始數(shù)據(jù)源瞬内。如果用戶提交的查詢語(yǔ)句未在Kylin中預(yù)先定義,Kylin會(huì)返回一個(gè)錯(cuò)誤限书。
值得一提的是虫蝶,Kylin對(duì)數(shù)據(jù)源、執(zhí)行引擎和Cube存儲(chǔ)三個(gè)核心模塊提取出了抽象層倦西,這意味著這三個(gè)模塊可以被任意地?cái)U(kuò)展和替換能真。比如可以使用Spark替代MapReduce作為Cube的構(gòu)建引擎,使用Cassandra替代HBase作為Cube計(jì)算后數(shù)據(jù)的存儲(chǔ)等。良好的擴(kuò)展性使得Kylin可以在這個(gè)技術(shù)發(fā)展日新月異的時(shí)代方便地使用更先進(jìn)的技術(shù)替代現(xiàn)有技術(shù)粉铐,做到與時(shí)俱進(jìn)疼约,也使用戶可以針對(duì)自己的業(yè)務(wù)特點(diǎn)對(duì)Kylin進(jìn)行深度定制。
Apache Kylin的這種架構(gòu)使得它擁有許多非常棒的特性:
SQL接口:
Kylin主要的對(duì)外接口就是以SQL的形式提供的蝙泼。SQL簡(jiǎn)單易用的特性極大地降低了Kylin的學(xué)習(xí)成本程剥,不論是數(shù)據(jù)分析師還是Web開發(fā)程序員都能從中收益。
支持海量數(shù)據(jù)集
不論是Hive汤踏、SparkSQL织鲸,還是Impala、Presto溪胶,都改變不了這樣一個(gè)事實(shí):查詢時(shí)間隨著數(shù)據(jù)量的增長(zhǎng)而線性增長(zhǎng)搂擦。而Apache Kylin使用預(yù)計(jì)算技術(shù)打破了這一點(diǎn)。Kylin在數(shù)據(jù)集規(guī)模上的局限性主要取決于維度的個(gè)數(shù)和基數(shù)哗脖,而不是數(shù)據(jù)集的大小盾饮,所以Kylin能更好地支持海量數(shù)據(jù)集的查詢。
亞秒級(jí)響應(yīng)
同樣受益于預(yù)計(jì)算技術(shù)懒熙,Kylin的查詢速度非常快普办,因?yàn)閺?fù)雜的連接工扎、聚合等操作都在Cube的構(gòu)建過(guò)程中已經(jīng)完成了。
水平擴(kuò)展
Apache Kylin同樣可以使用集群部署方式進(jìn)行水平擴(kuò)展衔蹲。但部署多個(gè)節(jié)點(diǎn)只能提高Kylin處理查詢的能力肢娘,而不能提升它的預(yù)計(jì)算能力。
可視化集成
Apache Kylin提供了ODBC/JDBC接口和RESTful API舆驶,可以很方便地與Tableau等數(shù)據(jù)可視化工具集成橱健。數(shù)據(jù)團(tuán)隊(duì)也可以在開放的API上進(jìn)行二次開發(fā)。