Apache Kylin v3.1.0 已於上週正式釋出,其中包含了許多值得一試的新功能,本文選擇了 Presto 查詢下壓引擎、Flink 構建引擎、Kylin on Kubernetes 解決方案、新版 Hive 全域性字典、增強的 Cube 遷移服務這五項重點功能進行介紹。
Presto 查詢下壓引擎
之前版本的 Kylin 提供了查詢下壓功能,該功能對於 Hive 資料來源的下壓有比較好的支援,但是對 Hive 以外的具有不相容語法的資料來源,使用者就容易遇到因為種種方言不相容而導致查詢下壓失敗的問題。
為了解決這個問題,Kyligence 貢獻了基於 Data Source SDK 開發的 Presto 查詢下壓引擎,該功能通過 Calicte 完成了Kylin 和 Presto 方言翻譯,大大提升了查詢下壓的成功率。
Presto 下壓引擎的使用文件請參考 :
http://kylin.apache.org/docs/tutorial/query_pushdown.html
嶄新的 Flink 構建引擎
Flink Engine 由騰訊貢獻到 Kylin 社群(KYLIN – 3758)。在過去版本中,Kylin 只支援 MapReduce 和 Spark 兩種構建引擎,為了擴大 Kylin 生態,進一步提升構建速度,Kylin v3.1.0引入了 Flink 作為構建引擎,使用者可以很容易的使用 Flink 構建,只需要配置 FLINK_HOME,然後在建立 Cube 時選擇 Build Engine 為 Flink,就可以體驗這一功能。Flink 基於 Google 的 DataFlow 模型以及 Streaming First 的設計理念要比 Spark 在流處理領域擁有先天的優勢。
Flink Cube 引擎基於 Kylin 原先的外掛化的架構,是一個相對獨立的模組,繼承 IBatchCubingEngine 介面實現了 FlinkBatchCubingEngine2,跟 Kylin 其他部件沒有產生太多的耦合。它整體上延續了 Spark Engine 的設計與實現,但由於 Spark 跟 Flink 的 DataSet API 存在著一定程度的差異,所以開發過程中需要進行一些適配工作。
Flink Engine 開發完成後,我們對它進行了測試。測試環境為 CDH5 叢集,包括 4 個物理節點,每個物理節點 32 Core,125G 記憶體,資料來源是基於 SSB 資料集,事實表包含 6 千萬記錄,通過分析 “Build Cube With Spark”/”Build Cube With Flink” 步驟的日誌發現,使用 Spark 構建使用了 15.36 分鐘,使用 Flink 構建使用了 12.64 分鐘,Flink Engine 構建用時減少了 17.7%。
Flink Engine 的使用文件可以參考:
http://kylin.apache.org/docs/tutorial/cube_flink.html
初步的 Kylin on Kubernetes 解決方案 [1]
Kylin on Kubernetes 方案由 eBay 實現並貢獻到 Kylin 社群(KYLIN-4445)。Kylin 在 eBay 已經執行了 超過 5 年,起初直接執行在物理伺服器上。由於 Data Center 的遷移和 Tech Refresh 的需求,eBay 於 2019 年初開始了把 Kylin 遷移到雲上的計劃,並於上半年把 Kylin 整體遷移到了 eBay 的 Kubernetes 平臺 Tess 上,開啟了 Kylin on Kubernetes 的時代。
Kylin on Kubernetes 使用 Kubernetes 推薦的 Docker 作為映象,讓開發者可以打包他們的應用以及依賴包到一個可移植的映象中,然後釋出到任何流行的 Linux 或 Windows 機器上,也可以實現虛擬化。Kylin 的 Docker 映象分為兩個 Dockerfile: Hadoop-client 和 Kylin,Kylin 的 Dockerfile 是基於 Hadoop-client 的。
相對於原來的部署方案,使用 Kylin on Kubernetes 部署能夠帶來以下收益:
- 提高系統可用性,並實現部署的運維過程的自動化;
- 擴容(scale up/scale out)更加方便;
- 可維護性得到顯著提高;
- 藉助 Kubernetes 帶來的高度可移植性,使得在不同環境之間的遷移,變得邏輯簡單而且結果可靠;
- 系統資源的管理和監控有了簡便而且統一的方式,可以進一步提升資源使用率。
Kylin on Kubernetes 部署文件可以參考:
http://kylin.apache.org/cn/docs/install/kylin_on_kubernetes.html
效能提升顯著的新版Hive全域性字典 [2]
Hive Global Dictionary 的第二版(KYLIN-4342)由滴滴貢獻到 Kylin 社群,並在 Kylin v3.1.0 正式釋出。在此之前,滴滴已經向 Kylin 社群貢獻過 Hive Global Dictionary 第一版。
實際上,Kylin 從 1.5.3 版本開始就支援全域性字典功能,對於基數不大(一億以內)的情況能夠起到很好的支援,當時的版本有兩個比較明顯的缺陷,一是全域性字典是在 Job Server 上通過單執行緒的方式構建,隨著資料的增多構建時長變得不可控;另外,隨著資料的累積,字典構建對 Job Server 的記憶體需求也不斷增多,其效能基本不能滿足我們當時更高基數全域性字典構建的需求。
基於這樣的背景,滴滴內部對 Hive Global Dictionary 進行了 3 版迭代,最終的這一版就是 Kylin 社群稱之為 Hive Global Dictionary V2 的實現,已經能夠滿足以下要求:
- 分散式構建全域性字典
- 突破基數限制
- 提升構建速度
- 降低單節點所需記憶體
在滴滴的內部測試中,使用 Hive Global Dictionary V2,字典編碼(MR Job部分)基本可以恆定在 15 分鐘內完成,並且可以在不同的 Cube 之間實現字典複用。
Hive Global Dictionary V2的使用文件可以參考:
http://kylin.apache.org/docs/howto/howto_use_hive_mr_dict.html
增強的 Cube 遷移服務 [3]
Kylin v3.1.0 中釋出的增強的 Cube 遷移服務由 eBay 貢獻給 Kylin 社群。在過去版本中,Cube 遷移前的質量及相容性驗證完全是靠人工校驗,出現的質量問題及相容問題都需要人工溝通和修改。針對上述不足,Kylin v3.1.0 增強了如下功能:
- 引入了一系列規則對 Cube 質量及 Hive 後設資料相容性進行後端校驗,比如生產環境下的目標專案是否存在,生產環境下的 Hive 表是否與測試環境下的一致,Cube 膨脹率和查詢效率是否符合預期值(可通過配置項設定合理的值)等;
- 通過郵件形式來傳送 Cube 遷移申請給管理員,由管理員稽核後進行遷移,同時將遷移結果以郵件形式傳送給請求者;
- 支援通過工具類 CubeMigrationCrossClusterCLI 進行跨 Hadoop 叢集的 Cube 遷移。之前的版本中,Cube 遷移的一個前置條件是兩個 Kylin 例項必須使用同一個 Hadoop 叢集,而本次釋出的 Cube 遷移功能則支援跨 Hadoop 叢集進行遷移,同時支援遷移 Cube 資料。
Cube 遷移服務的使用文件可以參考:
http://kylin.apache.org/docs/tutorial/cube_migration.html
特別感謝
在文末特別對貢獻這些功能程式碼到 Kylin 以及參與本文編寫的楊華,王小靜,李凡凡,allenma,kyotoYaho,mingmwang,sanjulian,俞霄翔,張亞倩,張智超等同學表達一下感謝~
參考連結
[1] https://mp.weixin.qq.com/s/LdyGjXRj8KkrnGgpIdEVjA
[2] https://mp.weixin.qq.com/s/jK-nAOAxaI0k3_Yrt_KlLA
[3] http://kylin.apache.org/cn/docs/tutorial/cube_migration.html
*如果想第一時間獲得 Kylin 的資訊和活動資訊,請新增 K 小助 (微訊號:uncertainly5)並備註您的 “所在城市-公司-崗位-暱稱”。