kylin如何支持flink_如何使用 JuiceFS 在云上优化 Kylin 4.0 的存储性能?
Apache Kylin 4.0 采用 Spark 作為構建引擎以及 Parquet 作為存儲,讓云上部署和伸縮變得更容易,然而使用云上的對象存儲相較于使用本地磁盤的 HDFS,可能存在部分兼容性和性能問題。面對這樣的問題,今天為大家帶來 JuiceFS 的優化方案。Kylin 4.0 的強大查詢引擎加上 JuiceFS 高效的本地緩存,就能實現兼容性和性能的雙贏!想了解更多詳情,快看這篇 Kylin 和 Juicedata 聯合出品的實用好文吧!
作者簡介
蘇銳,Juicedata 合伙人,在互聯網行業工作超過十五年,參與創建國內首個完全架構在公有云上的分布式文件系統 JuiceFS,客戶覆蓋國內數十家科技企業,并在運營商、證券、能源、航天、廣電等多個領域交付存儲容量近百 PB。
俞霄翔,Kyligence 高級工程師,Apache Kylin Committer & PMC。
什么是 Apache Kylin?
Apache Kylin 是一個為超大規模數據設計的、開源的、分布式的分析引擎,提供 Hadoop/Spark 之上的 SQL 查詢接口及多維在線分析(OLAP)能力,最初由 eBay 開發并貢獻至 Apache 軟件基金會,面對海量數據,Kylin 也能實現亞秒級的查詢響應。
Apache Kylin 架構圖
作為一個超高性能的查詢引擎,Kylin 可以下接各種數據源,如 Hive、Kafka,上接各種 BI 系統,比如 Tableau、Superset,還提供 JDBC/ODBC/REST API 等供各種應用集成。自開源以來,Kylin 已經得到大量使用,例如美團、小米、58 同城、貝殼找房、華為、汽車之家、攜程、同程、Vivo、雅虎日本、OLX Group 等,每日訪問量從幾萬到上千萬不等,大部分查詢能夠在 1-3 秒內完成。
如果你的產品/業務方找到你,說需要在幾十億甚至上百上千億的記錄上做靈活匯總查詢,響應要快,并發要高,同時資源占用要少;為了支持應用開發,它還要完整支持 SQL 語法并且能夠無縫集成 BI,那么 Apache Kylin 就是你的不二選擇。
Kylin 的核心思想是預計算,將數據按照指定的維度和指標,預先計算出所有可能的查詢結果(也就是 Cube,多維立方體),利用空間換時間來加速查詢模式固定的 OLAP 查詢。每一種維度組合稱之為 Cuboid,所有 Cuboid 的集合是一個 Cube。其中由所有維度組成的 Cuboid 稱為 Base Cuboid,其它的 Cuboid 都可以從 Base Cuboid 二次聚合出來。在查詢時,Kylin 會自動選擇滿足條件的最合適的 Cuboid,相比于從用戶的原始表進行計算,從 Cuboid 取數據進行計算能極大的降低掃描的數據量和計算量。
一個四維 Cube 示例
Kylin 從誕生之初選擇了 HBase 作為存儲引擎,基本滿足查詢性能的要求;然而基于 HBase 方案存在一系列痛點,例如 HBase 運維復雜、查詢節點存在單點問題、HBase 并非純列式存儲 IO 效率不高等。Apache Kylin v4 采用 Parquet + Spark 的組合,不再使用 HBase,使得計算和存儲相分離,是一次重大架構升級,更加適應云原生的技術趨勢。
Kylin on Parquet 在云上面臨的挑戰
相比以前,基于新一代的 Kylin 4,用戶可以在云上更加快速簡單地部署高性能、低 TCO 的的數據分析服務。計算和存儲的分離,以及架構復雜性的降低,都使得 Kylin 成為云上數據分析的最佳選擇之一。但是在云上基于對象存儲抽象而來的文件系統和傳統的 HDFS 的巨大差異,帶來了一系列需要關注的問題,例如數據本地性、對象存儲 API 調用頻次限制、數據移動操作的一致性難以保證等,給 Kylin 構建和查詢帶來了一些穩定性和性能方面的挑戰。關于如何緩解乃至達到原生 HDFS 的優秀性能體驗,我們可以看到一些成功的解決方案,JuiceFS 就是其中之一。
什么是 JuiceFS?
JuiceFS 是面向云原生環境設計的分布式文件系統,完全兼容 POSIX 和 HDFS,適用于大數據、機器學習訓練、Kubernetes 共享存儲、海量數據歸檔管理場景。支持全球所有公有云服務商,并提供全托管服務,客戶無需投入任何運維力量,即刻擁有一個彈性伸縮,并可擴展至 100PB 容量的文件系統。
在下面的這張架構圖中可以看出,JuiceFS 已經支持各種公有云的對象存儲產品,同時也支持了開源對象存儲,如 Ceph、MinIO、Swift 等。在 Linux 和 macOS 上提供 FUSE 客戶端,在 Windows 系統上也提供原生客戶端,都可以將 JuiceFS 的文件系統掛載到系統中,使用體驗和本地盤一模一樣。在 Hadoop 環境中提供 Java SDK,使用體驗和 HDFS 一樣。JuiceFS 的元數據服務在所有公有云上都部署了全托管服務,客戶不用自己維護任何服務,學習和使用門檻極低。
JuiceFS 架構圖
為什么 Kylin 和 JuiceFS 要一起使用?
如果客戶在公有云上使用 Kylin,并且希望將數據存儲在對象存儲上,會遇到兩個問題:
首要問題是兼容性,Kylin 默認支持 HDFS 和 Amazon S3,其他的公有云也都提供了 “S3 兼容” 的對象存儲,但是在實際的測試中我們發現,目前除了 AWS 和 Azure,其他公有云的對象存儲存在不兼容的情況,比如我們在阿里云上基于 OSS 運行 Kylin,無論是基于阿里云 EMR 和 CDH 自建集群,都會在 Cube 構建階段失敗。
第二個問題是性能,從用戶角度看在大數據場景下由 HDFS 換成對象存儲,能感受到的是性能下降。造成性能下降的原因有幾個:
JuiceFS 在大數據場景中可以徹底解決兼容性和性能問題,下面說說是怎么做到的。
首先說兼容性,JuiceFS 的元數據服務提供一個 Java SDK,它的作用和 HDFS 的 Java SDK 是等價的,實現了 HDFS 所有文件接口 API 的 Interface,在行為上保證和 HDFS 一致,只要是支持 HDFS 的計算引擎都可以使用 JuiceFS,不會有任何兼容性問題。而且,JuiceFS 支持全球所有的公有云服務,提供一致的體驗,用戶完全不用再關心不同云廠商對象存儲的差異性。
其次說性能,解釋一下 JuiceFS 如何解決上面三個方面帶來的性能下降:
綜上,JuiceFS 可以獲得與 HDFS 相當的性能表現,同時對 Hadoop 生態的產品提供完美的兼容性支持。更重要的一點是,無論客戶使用哪家公有云,都可以使用 JuiceFS,獲得一致的體驗。
性能比較
上面解釋了 Kylin on Parquet 和 JuiceFS 一起使用能獲得的收益,下面來看一下性能測試的結果。
前文提到基于 OSS 做 Cube 構建出現兼容性問題,無法正確構建 Cube。但是我們把 JuiceFS 上構建好的 Cube 數據拷貝到 OSS 上執行 Query 是可以的,所以我們基于 TPC-H 10GB 大小的數據集,測試了其中的 Query1 至 Query22,在總的執行時間上 JuiceFS 比 OSS 快了 38%。
- JuiceFS 使用 70,423ms
- OSS 使用 113,670ms
下表給出詳細的測試環境配置和所有測試 Query 執行時間:
機器配置
在阿里云上使用 CDH 5.16 搭建集群,詳細配置和軟件版本如下:
所有測試查詢執行時間
總結
Kylin 4.0 引入計算和存儲分離的架構,使得 Kylin 在云上的部署和伸縮變得更加容易,然而使用云上的對象存儲相較于使用本地磁盤的 HDFS ,一方面存在對接開發以及兼容性問題,另一方面性能會有所下降。使用 JuiceFS 搭配 Kylin,在所有公有云上都無需特殊適配,即可在 EMR 或者自建 Hadoop 集群中使用云存儲服務進行大數據計算。JuiceFS 讓你的集群實現存儲計算分離架構的同時,通過高效的本地緩存減少每次網絡 IO 帶來的開銷,在基于 Parquet 格式的查詢分析場景中,對于隨機讀可以有效降低延遲,并減少讀放大,獲得跟 HDFS 接近的性能。在我們的測試場景中,使用 JuiceFS 相比于直接使用對象存儲性能提升了 38%。
如果你打算在公有云上使用 Kylin 來完成數據分析需求,存儲使用 JuiceFS 配合對象存儲,能在兼容性和性能上雙贏。
作者:蘇銳
總結
以上是生活随笔為你收集整理的kylin如何支持flink_如何使用 JuiceFS 在云上优化 Kylin 4.0 的存储性能?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html使div内部元素水平排列_元素周
- 下一篇: poi报空指针_POI 导出文件 报空指