Apache Kylin v2.6.0 正式釋出,開源的分散式分析引擎
近日,Apache Kylin 社群很高興地宣佈,Apache Kylin v2.6.0 正式釋出。
Apache Kylin 是一個開源的分散式分析引擎,旨在為極大資料集提供 SQL 介面和多維分析(OLAP)的能力。
Apache Kylin v2.6.0 是繼 v2.5.0 後的一個新功能版本,該版本引入了很多有價值的改進,完整的改動列表請參見release notes:
https://kylin.apache.org/docs/release_notes.html
在這裡,我們將挑一些主要改進做說明。
針對以JDBC為資料來源的SDK
Kylin 目前已經支援通過 JDBC 連線包括 Amazon Redshift, SQL Server 在內的多種資料來源。
為了便於開發者更便利地處理各種 SQL 方言(dialect) 的不同,以更加簡單地開發新的 JDBC 資料來源,Kylin 提供了相應的 SDK 和統一的 API 入口:
-
同步元資料和資料
-
構建 Cube
-
當找不到相應的 Cube 來解答查詢時,下推查詢到資料來源
更多內容參見 KYLIN-3552。
使用 Memcached 作 Kylin 的分散式快取
在過去,Kylin 對查詢結果的快取不是十分高效,主要有以下兩個方面的原因:
-
一個是當 Kylin 的 metadata 發生變化時,會主動盲目地去清除大量快取,使得快取會被頻繁重新整理而導致利用率降低。
-
另一點是由於只使用本地快取而導致 Kylin server 之間不能共享彼此的快取,這樣查詢的快取命中率就會降低。
本地快取的一個缺點是大小受到限制,不能像分散式快取那樣水平擴充套件。這樣導致能快取的查詢結果量受到了限制。
針對這些缺陷,我們改變了快取失效的機制,不再主動去清理快取,而是採取如下的方案:
-
在將查詢結果放入快取之前,根據當前的元資料資訊計算一個數字簽名,並與查詢結果一同放入快取中。
-
從快取中獲取查詢結果之後,根據當前的元資料資訊計算一個數字簽名,對比兩者的數字簽名是否一致。如果一致,那麼快取有效;反之,該快取失效並刪除。
我們還引入了 Memcached 作為 Kylin 的分散式快取。這樣 Kylin server 之間可以共享查詢結果的快取,而且由於 Memcached server 之間的獨立性,非常易於水平拓展,更加有利於快取更多的資料。
相關開發任務是 KYLIN-2895, KYLIN-2894, KYLIN-2896, KYLIN-2897, KYLIN-2898, KYLIN-2899。
ForkJoinPool 簡化 fast cubing 的執行緒模型
在過去進行 fast cubing 時,Kylin 使用自己定義的一系列執行緒,如 split 執行緒,task 執行緒,main 執行緒等等進行併發的 Cube 構建。
在這個執行緒模型中,執行緒之間的關係十分的複雜,而且對異常處理也十分容易出錯。
現在我們引入了 ForkJoinPool,在主執行緒中處理 split 邏輯,構建 cuboid 的任務以及子任務都在 fork join pool中執行,cuboid 構建的結果可以被非同步的收集並且可以更早地輸出給下游的 merge 操作。
更多內容參見 KYLIN-2932。
改進 HLLCounter 的效能
對於 HLLCounter, 我們從兩方面進行了改進:構建 HLLCounter 和計算調和平均的方式。
-
關於 HLLCounter 的構建,我們不再使用merge的方式,而是直接copy別的HLLCounter裡面的registers
-
關於計算 HLLCSnapshot 裡面的調和平均,做了以下三個方面的改進:
-
關於計算 HLLCSnapshot 裡面的調和平均,做了以下三個方面的改進:
-
快取所有的1/2^r
-
使用整型相加代替浮點型相加
-
刪除條件分支,例如無需檢查 registers[i] 是不是為0
更多內容參見 KYLIN-3656。
改進 Cube Planner 演算法
在過去,cube planner 的 phase two 增加未被預計算的 cuboid 的方式只能通過 mandatory cuboid 的方式。而一個 cuboid 是否為 mandatory,又有兩種方式:手動設定,或者查詢時 rollup 的行數足夠大。
這裡通過判斷查詢時 rollup 的行數是否足夠大來判斷是否為 mandatory cuboid 的方式有兩大缺陷:
-
一是估算 rollup 的行數的演算法不是很好
-
二是很難設立一個靜態的閾值來做判定
現在我們不再從 rollup 行數的角度看問題了。一切都是從 cuboid 行數的角度看問題,這樣就和 cost based 的 cube planner 演算法做了統一。
為此我們通過使用 rollup 比率來改進了未被預先構建的 cuboid 的行數的估算,然後讓 cost based 的 cube planner 演算法來判定哪些未被構建的 cuboid 該被構建,哪些該被遺棄。
通過這樣的改進,無需通過設定靜態的閾值來推薦 mandatory cuboid 了,而 mandatory cuboid 只能被手動設定,不能被推薦了。
更多內容參見 KYLIN-3540。
下載
要下載Apache Kylin v2.6.0原始碼或二進位制包,請訪問下載頁面:
http://kylin.apache.org/download
升級參考升級指南:
https://kylin.apache.org/docs/howto/howto_upgrade.html
反饋如果您遇到問題或疑問,請傳送郵件至 Apache Kylin dev 或 user 郵件列表:
[email protected] ,[email protected]
在傳送之前,請確保您已通過傳送電子郵件至:
[email protected] 或[email protected] 訂閱了郵件列表。
感謝 eBay 團隊鍾陽紅(Apache Kylin Committer & PMC)撰稿!
文章轉載自公眾號:apachekylin