大数据分析神兽麒麟(Apache Kylin)
1.Apache Kylin是什么?
在現(xiàn)在的大數(shù)據(jù)時代,越來越多的企業(yè)開始使用Hadoop管理數(shù)據(jù),但是現(xiàn)有的業(yè)務(wù)分析工具(如Tableau,Microstrategy等)往往存在很大的局限,如難以水平擴展、無法處理超大規(guī)模數(shù)據(jù)、缺少對Hadoop的支持;而利用Hadoop做數(shù)據(jù)分析依然存在諸多障礙,例如大多數(shù)分析師只習(xí)慣使用SQL,Hadoop難以實現(xiàn)快速交互式查詢等等。神獸Apache Kylin就是為了解決這些問題而設(shè)計的。
Apache Kylin,中文名麒(shen)麟(shou) 是Hadoop動物園的重要成員。Apache Kylin是一個開源的分布式分析引擎,最初由eBay開發(fā)貢獻至開源社區(qū)。它提供Hadoop之上的SQL查詢接口及多維分析(OLAP)能力以支持大規(guī)模數(shù)據(jù),能夠處理TB乃至PB級別的分析任務(wù),能夠在亞秒級查詢巨大的Hive表,并支持高并發(fā)。
Apache Kylin于2014年10月在github開源,并很快在2014年11月加入Apache孵化器,于2015年11月正式畢業(yè)成為Apache頂級項目,也成為首個完全由中國團隊設(shè)計開發(fā)的Apache頂級項目。于2016年3月,Apache Kylin核心開發(fā)成員創(chuàng)建了Kyligence公司,力求更好地推動項目和社區(qū)的快速發(fā)展。
Kyligence是一家專注于大數(shù)據(jù)分析領(lǐng)域創(chuàng)新的數(shù)據(jù)科技公司,提供基于Apache Kylin的企業(yè)級智能分析平臺及產(chǎn)品,以及可靠、專業(yè)、源碼級的商業(yè)化支持;并推出Apache Kylin開發(fā)者培訓(xùn),頒發(fā)全球唯一的Apache Kylin開發(fā)者認證證書。
2.Kylin的基本原理和架構(gòu)
下面開始聊一聊Kylin的基本原理和架構(gòu)。簡單來說,Kylin的核心思想是預(yù)計算,即對多維分析可能用到的度量進行預(yù)計算,將計算好的結(jié)果保存成Cube,供查詢時直接訪問。把高復(fù)雜度的聚合運算、多表連接等操作轉(zhuǎn)換成對預(yù)計算結(jié)果的查詢,這決定了Kylin能夠擁有很好的快速查詢和高并發(fā)能力。
上圖所示就是一個Cube的例子,假設(shè)我們有4個dimension,這個Cube中每個節(jié)點(稱作Cuboid)都是這4個dimension的不同組合,每個組合定義了一組分析的dimension(如group by),measure的聚合結(jié)果就保存在這每個Cuboid上。查詢時根據(jù)SQL找到對應(yīng)的Cuboid,讀取measure的值,即可返回。
為了更好的適應(yīng)大數(shù)據(jù)環(huán)境,Kylin從數(shù)據(jù)倉庫中最常用的Hive中讀取源數(shù)據(jù),使用 MapReduce作為Cube構(gòu)建的引擎,并把預(yù)計算結(jié)果保存在HBase中,對外暴露Rest API/JDBC/ODBC的查詢接口。因為Kylin支持標(biāo)準(zhǔn)的ANSI SQL,所以可以和常用分析工具(如Tableau、Excel等)進行無縫對接。下面是Kylin的架構(gòu)圖。
說到Cube的構(gòu)建,Kylin提供了一個稱作Layer Cubing的算法。簡單來說,就是按照dimension數(shù)量從大到小的順序,從Base Cuboid開始,依次基于上一層Cuboid的結(jié)果進行再聚合。每一層的計算都是一個單獨的Map Reduce任務(wù)。如下圖所示。
MapReduce的計算結(jié)果最終保存到HBase中,HBase中每行記錄的Rowkey由dimension組成,measure會保存在column family中。為了減小存儲代價,這里會對dimension和measure進行編碼。查詢階段,利用HBase列存儲的特性就可以保證Kylin有良好的快速響應(yīng)和高并發(fā)。
有了這些預(yù)計算的結(jié)果,當(dāng)收到用戶的SQL請求,Kylin會對SQL做查詢計劃,并把本該進行的Join、Sum、Count Distinct等操作改寫成Cube的查詢操作。
Kylin提供了一個原生的Web界面,在這里,用戶可以方便的創(chuàng)建和設(shè)置Cube、管控Cube構(gòu)建進度,并提供SQL查詢和基本的結(jié)果可視化。
根據(jù)公開數(shù)據(jù)顯示,Kylin的查詢性能不只是針對個別SQL,而是對上萬種SQL 的平均表現(xiàn),生產(chǎn)環(huán)境下90%ile查詢能夠在在3s內(nèi)返回。在上個月舉辦的ApacheKylin Meetup中,來自美團、京東、百度等互聯(lián)網(wǎng)公司分享了他們的使用情況。例如,在京東云海的案例中,單個Cube最大有8個維度,最大數(shù)據(jù)條數(shù)4億,最大存儲空間800G,30個Cube共占存儲空間4T左右。查詢性能上,當(dāng)QPS在50左右,所有查詢平均在200ms以內(nèi),當(dāng)QPS在200左右,平均響應(yīng)時間在1s以內(nèi)。
北京移動也在meetup上展示了Kylin在電信運營商的應(yīng)用案例,從數(shù)據(jù)上看,Kylin能夠在比Hive/SparkSQL在更弱的硬件配置下獲得更好的查詢性能。目前,有越來越多的國內(nèi)外公司將Kylin作為大數(shù)據(jù)生產(chǎn)環(huán)境中的重要組件,如ebay、銀聯(lián)、百度、中國移動等。大家如果想了解更多社區(qū)的案例和動態(tài),可以登錄Apache Kylin官網(wǎng)或Kyligence博客進行查看。
3.Kylin的最新特性
Kylin的最新版本1.5.x引入了不少讓人期待的新功能,可擴展架構(gòu)將Kylin的三大依賴(數(shù)據(jù)源、Cube引擎、存儲引擎)徹底解耦。Kylin將不再直接依賴于Hadoop/HBase/Hive,而是把Kylin作為一個可擴展的平臺暴露抽象接口,具體的實現(xiàn)以插件的方式指定所用的數(shù)據(jù)源、引擎和存儲。
開發(fā)者和用戶可以通過定制開發(fā),將Kylin接入除Hadoop/HBase/Hive以外的大數(shù)據(jù)系統(tǒng),比如用Kafka代替Hive作數(shù)據(jù)源,用Spark代替MapReduce做計算引擎,用Cassandra代替HBase做存儲,都將變得更為簡單。這也保證了Kylin可以隨平臺技術(shù)一起演進,緊跟技術(shù)潮流。
在Kylin 1.5.x中還對HBase存儲結(jié)構(gòu)進行了調(diào)整,將大的Cuboid分片存儲,將線性掃描改良為并行掃描。基于上萬查詢進行了測試對比結(jié)果顯示,分片的存儲結(jié)構(gòu)能夠極大提速原本較慢的查詢5-10倍,但對原本較快的查詢提速不明顯,綜合起來平均提速為2倍左右。
除此之外,1.5.x還引入了Fast cubing算法,利用Mapper端計算先完成大部分聚合,再將聚合后的結(jié)果交給Reducer,從而降低對網(wǎng)絡(luò)瓶頸的壓力。對500多個Cube任務(wù)的實驗顯示,引入Fast cubing后,總體的Cube構(gòu)建任務(wù)提速1.5倍。
目前,社區(qū)正在著手準(zhǔn)備Apache Kylin 1.5.2版本的發(fā)布,目前正處于Apache Mailing list投票階段,預(yù)計將會在本周在Kylin官網(wǎng)發(fā)布正式下載。
在本次的1.5.2版本中,Kylin帶來了總計 36個缺陷修復(fù)、33個功能改進、6個新功能。一些主要的功能改進包括對HyperLogLog計算效率的提升、在Cube構(gòu)建時對Convert data to hfile步驟的提速、UI上對功能提示的體驗優(yōu)化、支持hive view作為lookup表等等。
另一個新消息是Kylin將支持MapR和CDH的Hadoop發(fā)行版,具體信息可見KYLIN-1515和KYLIN-1672。相應(yīng)的測試版本是MapR5.1和CDH5.7。
UI上提供了一個重要更新,即允許用戶在Cube級別進行自定義配置,以覆蓋kylin.properties中的全局配置。如在cube中定義kylin.hbase.region.count.max可以設(shè)置該cube在hbase中region切分的最大數(shù)量。
另一個重要的功能是Diagnosis。用戶經(jīng)常會遇到一些棘手的問題,例如Cube構(gòu)建任務(wù)失敗、SQL查詢失敗,或Cube構(gòu)建時間過長、SQL查詢時間過長等。但由于運維人員對Kylin系統(tǒng)了解不深,很難快速定位到root cause所在地。我們在mailing list里也經(jīng)常看到很多用戶求助,由于不能提供足夠充分的信息,社區(qū)也很難給出一針見血的建議。
當(dāng)用戶遇到查詢、Cube/Model管理的問題,單擊System頁面的Diagnosis按鈕,系統(tǒng)會自動抓取當(dāng)前Project相關(guān)的信息并打包成zip文件下載到用戶本地。這個包會包含相關(guān)的Metadata、日志、HBase配置等。當(dāng)用戶需要在mailing list求助,也可以附上這個包。當(dāng)一個cube構(gòu)建任務(wù)執(zhí)行失敗或時間過長,用戶可以單擊Job下的Diagnosis按鈕。同樣的,系統(tǒng)會抓取和下載Job相關(guān)信息成一個zip包。
我是本次Kylin1.5.2版本發(fā)布的release manager,歡迎大家到apache kylin郵件列表積極參與release投票。
如果有朋友想更加系統(tǒng)地學(xué)習(xí)如何高效使用Kylin和進行二次開發(fā),歡迎大家報名Kyligence正在推出的《Apache Kylin開發(fā)者認證培訓(xùn)》,可以登錄http://kyligence.io/training了解相關(guān)信息 。
Q&A
Q1、對mdx支持情況如何?
A1:我們現(xiàn)在不支持MDX查詢,查詢?nèi)肟谑荢QL,像saiku這種基于MDX的操作,社區(qū)已經(jīng)有人貢獻了Mondrian jar包,可以將saiku 前臺提供的mdx轉(zhuǎn)換為sql,再通過jdbc jar發(fā)送到Kylin server,不過功能上有所限制,left join, topN, count distinct支持受限。
Q2、麒麟針對出來T級別的數(shù)據(jù),每日制作cube大約話費多久時間?
A2:具體cube構(gòu)建時間視不同情況而定,具體取決于dimension數(shù)量及不同組合情況、Cardinality大小、源數(shù)據(jù)大小、Cube優(yōu)化程度、集群計算能力等因素。在一些案例中,在一個shared cluster構(gòu)建數(shù)十GB的數(shù)據(jù)只需要幾十分鐘。建議大家在實際環(huán)境先進行測試,尋找可以對Cube進行優(yōu)化的點。此外,一般來說,Cube的增量構(gòu)建可以在ETL完成后由系統(tǒng)自動觸發(fā),往往這個時間和分析師做數(shù)據(jù)分析是錯峰的。
Q3、如何向kylin提交代碼?
A3:將修改的代碼用git format-patch做成patch文件,然后attache在對應(yīng)的jira上,kylin committer會來review,沒有問題的話會merge到開發(fā)分支
Q4、如果數(shù)據(jù)是在elastic search,Kylin的支持如何?
A4:目前還不支持直接從es抽取數(shù)據(jù),需要先導(dǎo)出到hive再做cube build;有興趣的同學(xué)可以基于kylin 1.5的plugin架構(gòu)實現(xiàn)一個es的data source。
Q5、工作的比較好的前端拖拽控件有什么?
A5:目前應(yīng)該是tableau支持較好,saiku支持不是很好,有些場景如left join, count distinct,topN支持不是很好,用戶是可以基于Api開發(fā)自己的拖拽頁面的。
Q6、社區(qū)版和商業(yè)版功能上有什么區(qū)別?
A6:商業(yè)版能夠提供更高的安全性、穩(wěn)定性、可靠性,以及企業(yè)組件的良好集成;以及可靠、專業(yè)、源碼級的商業(yè)化支持。
Q7、對多并發(fā)支持表現(xiàn)如何?
A7:Kylin和其他MPP架構(gòu)技術(shù)想必一大優(yōu)勢就在高并發(fā)。一臺Kylin的Query Server就支持幾十到上百的QPS (取決于查詢的復(fù)雜度,機器的配置等因素),而且 Kylin支持良性的水平擴展,即增多kylin server和HBase節(jié)點就可迅速增大并發(fā)。
Q8、kylin可以整合spark machine learning和spark sql嗎?
A8:基于前面講到的可插拔架構(gòu),是可以整合的。
Q9、跟其它工具對比,有沒有考慮cube的構(gòu)建時間?因為人家是實時計算的,你是預(yù)計算的,這從機理上是不一樣的
A9:kylin跟其它mpp架構(gòu)的技術(shù)在查詢性能的對比,時間里是不含cube構(gòu)建的時間的,所以從某種意義上來講這樣的對比是有些不公平。但是,從用戶角度來看,分析師和最終用戶只關(guān)心查詢性能,而Kylin用預(yù)計算能大大提高查詢速度,這正是用戶所需要的!
Q10、Kylin ODBC 驅(qū)動程序有示例代碼?
A10:目前代碼在master分支,歡迎大家加入社區(qū)一起貢獻。
Q11、4億數(shù)據(jù)有點少,麒麟有沒有做過相關(guān)的benchmark ,在百億級別數(shù)據(jù),十個緯度的情況下,表現(xiàn)如何?
A11:來自社區(qū)的測試數(shù)據(jù),在一個近280億條原始數(shù)據(jù)的cube(26TB)上,90%的查詢在5秒內(nèi)完成。
Q12、數(shù)據(jù)量翻倍的話,空間使用會做指數(shù)級增長么
A12:通常cube的增長與原數(shù)據(jù)的增長基本一致,即原數(shù)據(jù)翻倍,cube也翻倍,或者更小一些;而非指數(shù)增長。
Q13、Data Model和Cube Model構(gòu)建過程能根據(jù)UI步驟詳細講下嗎?
A13:歡迎登陸Kylin網(wǎng)站,查詢具體的使用教程。http://kylin.apache.org/
Q14、你好,相關(guān)鏈接能貼一下嗎,謝謝! 來自社區(qū)的測試數(shù)據(jù),在一個近280億條原始數(shù)據(jù)的cube(26TB)上,90%的查詢在5秒內(nèi)完成。
A14:http://www.docin.com/p-1497646649.html
總結(jié)
以上是生活随笔為你收集整理的大数据分析神兽麒麟(Apache Kylin)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ImageLoader must be
- 下一篇: 绝地求生9.9美元的箱子