大資料分析神獸麒麟

2021-09-10 09:25:41 字數 4594 閱讀 8490

大資料分析神獸麒麟(apache kylin)

1.apache kylin是什麼?

在現在的大資料時代,越來越多的企業開始使用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於2023年10月在github開源,並很快在2023年11月加入apache孵化器,於2023年11月正式畢業成為apache頂級專案,也成為首個完全由中國團隊設計開發的apache頂級專案。於2023年3月,apache kylin核心開發成員建立了kyligence公司,力求更好地推動專案和社群的快速發展。

kyligence是一家專注於大資料分析領域創新的資料科技公司,提供基於apache kylin的企業級智慧型分析平台及產品,以及可靠、專業、原始碼級的商業化支援;並推出apache kylin開發者培訓,頒發全球唯一的apache kylin開發者認證證書。

2.kylin的基本原理和架構

下面開始聊一聊kylin的基本原理和架構。簡單來說,kylin的核心思想是預計算,即對多維分析可能用到的度量進行預計算,將計算好的結果儲存成cube,供查詢時直接訪問。把高複雜度的聚合運算、多表連線等操作轉換成對預計算結果的查詢,這決定了kylin能夠擁有很好的快速查詢和高併發能力。

上圖所示就是乙個cube的例子,假設我們有4個dimension,這個cube中每個節點(稱作cuboid)都是這4個dimension的不同組合,每個組合定義了一組分析的dimension(如group by),measure的聚合結果就儲存在這每個cuboid上。查詢時根據sql找到對應的cuboid,讀取measure的值,即可返回。

為了更好的適應大資料環境,kylin從資料倉儲中最常用的hive中讀取源資料,使用 mapreduce作為cube構建的引擎,並把預計算結果儲存在hbase中,對外暴露rest api/jdbc/odbc的查詢介面。因為kylin支援標準的ansi sql,所以可以和常用分析工具(如tableau、excel等)進行無縫對接。下面是kylin的架構圖。

說到cube的構建,kylin提供了乙個稱作layer cubing的演算法。簡單來說,就是按照dimension數量從大到小的順序,從base cuboid開始,依次基於上一層cuboid的結果進行再聚合。每一層的計算都是乙個單獨的map reduce任務。如下圖所示。

mapreduce的計算結果最終儲存到hbase中,hbase中每行記錄的rowkey由dimension組成,measure會儲存在column family中。為了減小儲存代價,這裡會對dimension和measure進行編碼。查詢階段,利用hbase列儲存的特性就可以保證kylin有良好的快速響應和高併發。

有了這些預計算的結果,當收到使用者的sql請求,kylin會對sql做查詢計畫,並把本該進行的join、sum、count distinct等操作改寫成cube的查詢操作。

kylin提供了乙個原生的web介面,在這裡,使用者可以方便的建立和設定cube、管控cube構建進度,並提供sql查詢和基本的結果視覺化。

3.kylin的最新特性

kylin的最新版本1.5.x引入了不少讓人期待的新功能,可擴充套件架構將kylin的三大依賴(資料來源、cube引擎、儲存引擎)徹底解耦。kylin將不再直接依賴於hadoop/hbase/hive,而是把kylin作為乙個可擴充套件的平台暴露抽象介面,具體的實現以外掛程式的方式指定所用的資料來源、引擎和儲存。

開發者和使用者可以通過定製開發,將kylin接入除hadoop/hbase/hive以外的大資料系統,比如用kafka代替hive作資料來源,用spark代替mapreduce做計算引擎,用cassandra代替hbase做儲存,都將變得更為簡單。這也保證了kylin可以隨平台技術一起演進,緊跟技術潮流。

在kylin 1.5.x中還對hbase儲存結構進行了調整,將大的cuboid分片儲存,將線性掃瞄改良為並行掃瞄。基於上萬查詢進行了測試對比結果顯示,分片的儲存結構能夠極大提速原本較慢的查詢5-10倍,但對原本較快的查詢提速不明顯,綜合起來平均提速為2倍左右。

在本次的1.5.2版本中,kylin帶來了總計 36個缺陷修復、33個功能改進、6個新功能。一些主要的功能改進包括對hyperloglog計算效率的提公升、在cube構建時對convert data to hfile步驟的提速、ui上對功能提示的體驗優化、支援hive view作為lookup表等等。

另乙個新訊息是kylin將支援mapr和cdh的hadoop發行版,具體資訊可見kylin-1515和kylin-1672。相應的測試版本是mapr5.1和cdh5.7。

ui上提供了乙個重要更新,即允許使用者在cube級別進行自定義配置,以覆蓋kylin.properties中的全域性配置。如在cube中定義kylin.hbase.region.count.max 可以設定該cube在hbase中region切分的最大數量。

另乙個重要的功能是diagnosis。使用者經常會遇到一些棘手的問題,例如cube構建任務失敗、sql查詢失敗,或cube構建時間過長、sql查詢時間過長等。但由於運維人員對kylin系統了解不深,很難快速定位到root cause所在地。我們在mailing list裡也經常看到很多使用者求助,由於不能提供足夠充分的資訊,社群也很難給出一針見血的建議。

q&aq1、對mdx支援情況如何?

a1:我們現在不支援mdx查詢,查詢入口是sql,像saiku這種基於mdx的操作,社群已經有人貢獻了mondrian jar包,可以將saiku 前台提供的mdx轉換為sql,再通過jdbc jar傳送到kylin server,不過功能上有所限制,left join, topn, count distinct支援受限。

q2、麒麟針對出來t級別的資料,每日製作cube大約話費多久時間?

a2:具體cube構建時間視不同情況而定,具體取決於dimension數量及不同組合情況、cardinality大小、源資料大小、cube優化程度、集群計算能力等因素。在一些案例中,在乙個shared cluster構建數十gb的資料只需要幾十分鐘。建議大家在實際環境先進行測試,尋找可以對cube進行優化的點。此外,一般來說,cube的增量構建可以在etl完成後由系統自動觸發,往往這個時間和分析師做資料分析是錯峰的。

q3、如何向kylin提交**?

a3:將修改的**用git format-patch做成patc**件,然後attache在對應的jira上,kylin committer會來review,沒有問題的話會merge到開發分支

q4、如果資料是在elastic search,kylin的支援如何?

a4:目前還不支援直接從es抽取資料,需要先導出到hive再做cube build;有興趣的同學可以基於kylin 1.5的plugin架構實現乙個es的data source。

q5、工作的比較好的前端拖拽控制項有什麼?

a5:目前應該是tableau支援較好,saiku支援不是很好,有些場景如left join, count distinct,topn支援不是很好,使用者是可以基於api開發自己的拖拽頁面的。

q6、社群版和商業版功能上有什麼區別?

a6:商業版能夠提供更高的安全性、穩定性、可靠性,以及企業元件的良好整合;以及可靠、專業、原始碼級的商業化支援。

q7、對多併發支援表現如何?

a7:kylin和其他mpp架構技術想必一大優勢就在高併發。一台kylin的query server就支援幾十到上百的qps (取決於查詢的複雜度,機器的配置等因素),而且 kylin支援良性的水平擴充套件,即增多kylin server和hbase節點就可迅速增大併發。

q8、kylin可以整合spark machine learning和spark sql嗎?

a8:基於前面講到的可插拔架構,是可以整合的。

q9、跟其它工具對比,有沒有考慮cube的構建時間?因為人家是實時計算的,你是預計算的,這從機理上是不一樣的

a9:kylin跟其它mpp架構的技術在查詢效能的對比,時間裡是不含cube構建的時間的,所以從某種意義上來講這樣的對比是有些不公平。但是,從使用者角度來看,分析師和終端使用者只關心查詢效能,而kylin用預計算能大大提高查詢速度,這正是使用者所需要的!

q10、kylin odbc 驅動程式有示例**?

q11、4億資料有點少,麒麟有沒有做過相關的benchmark ,在百億級別資料,十個緯度的情況下,表現如何?

a11:來自社群的測試資料,在乙個近280億條原始資料的cube(26tb)上,90%的查詢在5秒內完成。

q12、資料量翻倍的話,空間使用會做指數級增長麼

a12:通常cube的增長與原資料的增長基本一致,即原資料翻倍,cube也翻倍,或者更小一些;而非指數增長。

q13、data model和cube model構建過程能根據ui步驟詳細講下嗎?

q14、你好,相關鏈結能貼一下嗎,謝謝! 來自社群的測試資料,在乙個近280億條原始資料的cube(26tb)上,90%的查詢在5秒內完成。

a14:

大資料分析工具

新 指數 清博大資料 新 指數 www.gsdata.cn 是新 大資料第一平台,為運營新 利器 現已開通賬號分鐘級監測服務,打擊粉絲造假賬號,支援使用者自主監測新 資料 定製各類榜單,並提供資料api等各類增值服務。資料視覺化工具 cytoscape 圖表秀 資料觀 微博足跡視覺化 bdp個人版 ...

大資料分析流程

愛資料學院 welcome 一 為什麼要做乙份資料報告 你是乙個工作了一段時間的白領,你覺得現在這份工作不適合你,你下班以後去逛知乎,在上面看到很多人在說大資料代表未來,資料分析師是21世紀最 的十大職業之一 你激動了,你也要成為資料分析師,你利用空餘時間補上了統計知識,學了分析工具,然後發現自己目...

大資料分析框架

spark 是在 hadoop 的基礎上進行了一些架構上的改良。spark 與hadoop 最大的不同點在於,hadoop 使用硬碟來儲存資料,而spark 使用記憶體來儲存資料,因此 spark 可以提供超過 ha?doop 100 倍的運算速度。由於記憶體斷電後會丟失資料,spark不能用於處理...