為什么美團開發(fā)Kylin On Druid(轉(zhuǎn))

作者:敏丞

在大數(shù)據(jù)分析領(lǐng)域,Apache Kylin 和 Apache Druid (incubating) 是兩個普遍使用的 OLAP 引擎铡原,都具有支持在超大數(shù)據(jù)上進行快速查詢的能力偷厦。在一些對大數(shù)據(jù)分析非常依賴的企業(yè),往往同時運行著 Kylin 和 Druid 兩套系統(tǒng)燕刻,服務(wù)于不同的業(yè)務(wù)場景沪哺。

在2018年8月的Apache Kylin Meetup 活動上,美團點評技術(shù)團隊分享了他們的 Kylin On Druid 方案(簡稱 KOD)酌儒。那么,美團點評為什么要開發(fā)這樣一套混合系統(tǒng)枯途?這背后是有什么挑戰(zhàn)和考慮呢忌怎?本文將圍繞這些問題跟大家做探討籍滴,幫助讀者理解兩個OLAP 引擎之間的差異和各自優(yōu)勢。

Apache Kylin 簡介

Apache Kylin 是一個開源的分布式大數(shù)據(jù)分析引擎榴啸,在超大規(guī)模數(shù)據(jù)集上建立數(shù)據(jù)模型孽惰,構(gòu)建支持多維分析的預(yù)計算Cube,提供Hadoop 上的SQL 查詢接口及多維分析能力鸥印。并開放通用的ODBC勋功、JDBC 或Restful API 接口。這種獨特的預(yù)計算能力使Apache Kylin 可以應(yīng)對超大數(shù)據(jù)集上的查詢库说,并實現(xiàn)亞秒級查詢響應(yīng)狂鞋。

圖1 Kylin架構(gòu)圖

Apache Kylin 的優(yōu)勢

基于 Hadoop 成熟的計算引擎(MapReduce 和 Spark),提供了強大的處理超大數(shù)據(jù)集的預(yù)計算能力潜的,能夠在主流Hadoop 平臺上開箱即用骚揍。

支持 ANSI SQL,用戶可以使用 SQL 進行數(shù)據(jù)分析啰挪。

亞秒級低延遲響應(yīng)信不。

提供 OLAP 通用的星型模型和雪花模型等數(shù)據(jù)建模方式。

提供豐富的度量(Sum亡呵,Count Distinct抽活、Top N、Percentile 等)锰什。

提供智能的 Cuboid 剪枝能力下硕,減少存儲和計算資源的消耗。

支持直接跟主流 BI 工具的集成歇由,有豐富的接口卵牍。

既支持超大歷史數(shù)據(jù)的批量導(dǎo)入,也支持流數(shù)據(jù)的微批次導(dǎo)入沦泌。

Apache Druid ( incubating )簡介

Druid 誕生于 2012 年糊昙,是一個開源分布式數(shù)據(jù)存儲,其核心設(shè)計結(jié)合了分析型數(shù)據(jù)庫谢谦、時序數(shù)據(jù)庫释牺、搜索系統(tǒng)的特點,可以處理較大數(shù)據(jù)集上的數(shù)據(jù)收集和分析任務(wù)回挽。Druid 使用 Apache v2許可没咙,目前是 Apache 基金會孵化項目。

Druid 架構(gòu)

從 Druid 的部署架構(gòu)上看千劈,Druid 的進程根據(jù)角色主要分為以下三類:

Data Node(Slave 節(jié)點祭刚,數(shù)據(jù)攝入和計算)

Historical 負(fù)責(zé)加載 segment(已提交的不可變數(shù)據(jù)),接受歷史數(shù)據(jù)查詢。

Middle Manager 負(fù)責(zé)數(shù)據(jù)攝入和提交 segment涡驮,單個 task 由單獨 JVM負(fù)責(zé)暗甥。

Peon 負(fù)責(zé)完成單個 task,由Middle Manager 管理和監(jiān)控捉捅。

Query Node(查詢節(jié)點)

? Broker 接受查詢請求撤防,確定數(shù)據(jù)來自于哪些 segment,分發(fā) sub query 和merge 結(jié)果棒口。

Master Node(Master 節(jié)點寄月,作業(yè)調(diào)度和集群管理)

Coordinator 監(jiān)控 Historical,負(fù)責(zé)給Historical 分配 Segment 和監(jiān)控負(fù)載无牵。

Overlord 監(jiān)控 Middle Manager漾肮,負(fù)責(zé)給 Middle Manager 分配任務(wù)和協(xié)助發(fā)布 Segment。

外部依賴

同時 Druid 有三個可替換的外部依賴:

Deep Storage(分布式存儲)

Druid 使用 Deep storage 在 Druid 各節(jié)點間傳輸數(shù)據(jù)文件合敦。

Metadata Storage(元數(shù)據(jù)存儲)

元數(shù)據(jù)存儲了 Segment 的位置和Task 的輸出等元數(shù)據(jù)初橘。.

Zookeeper(集群管理和作業(yè)調(diào)度)

Druid 使用 Zookeeper (ZK) 來負(fù)責(zé)集群保證集群狀態(tài)的一致性。

圖2 Druid 架構(gòu)圖

Data Source 和 Segment

Druid 中的數(shù)據(jù)存放在Data Source 中充岛,Data Source 概念上等同于RDBMS中的表保檐;Data Source 概念上會根據(jù)時間戳分為若干個Chunk,同一時間區(qū)間產(chǎn)生的數(shù)據(jù)會歸屬到同一 Chunk崔梗;Chunk 內(nèi)部由若干個 Segment 組成夜只,每個 Segment 是一個物理上的數(shù)據(jù)文件,同時 Segment 是一個不可再分的存儲單元蒜魄。出于性能考慮扔亥,一個Segment 文件的大小是建議在 500mb 左右。

圖3 Data Source 和Segment

從 schema 看谈为,因為 Druid具有 OLAP 和 Time Series Database 的特性旅挤,列包含三種,分別為時間戳列伞鲫,維度列和度量列粘茄。時間戳列具有Segment 剪枝的作用,維度列和度量列在 Kylin 中有相似的概念秕脓。

圖4 Druid 中的Schema

Druid 的優(yōu)勢

具有實時攝取數(shù)據(jù)的能力柒瓣,數(shù)據(jù)進入 Druid 即可被查詢,延遲為毫秒級吠架,這也是Druid 的最大特點芙贫。

支持?jǐn)?shù)據(jù)明細查詢和聚合查詢。

數(shù)據(jù)存儲使用列式存儲格式傍药,避免不比較要的 IO磺平。

支持倒排索引魂仍,具有良好的過濾性能。

支持冷熱數(shù)據(jù)分離褪秀。

為什么美團開發(fā) Kylin on Druid

美團點評自 2015年上線使用 Apache Kylin 做為其離線 OLAP 平臺核心組件蓄诽,服務(wù)了幾乎所有業(yè)務(wù)線,數(shù)據(jù)量和查詢次數(shù)迅速增長媒吗,集群壓力越來越大。在這個過程中乙埃,美團技術(shù)團隊不斷摸索闸英,針對Kylin 所暴露出的一些問題尋找更優(yōu)方案,其中一個主要問題就是 Kylin所依賴的存儲:Apache HBase介袜。

我們知道甫何,目前的 Kylin 數(shù)據(jù)存儲使用 HBase,存儲 Cube 時將維度值和度量值轉(zhuǎn)換成 HBase 的 KeyValue遇伞。因為 HBase 不支持二級索引辙喂,只有一個行鍵 (RowKey) 索引,Kylin 的維度值會按照固定的順序拼接作為 RowKey 存儲鸠珠,那么排在 RowKey 前面的維度巍耗,就會獲得比后面的維度更好的過濾性能。下面我們來看一個例子渐排。

在測試環(huán)境使用兩個幾乎完全相同的的 Cube(Cube1 和 Cube2)炬太,它們的數(shù)據(jù)源相同,維度和度量也完全相同驯耻,兩者的唯一差別在于RowKey 中各個維度的順序:Cube1 將過濾用到的字段(P_LINEORDER.LO_CUSTKEY )放到第一個位置亲族,而 Cube2則將該字段放到最后一個位置。

圖5 Cube1 的RowKey 順序

圖6 Cube2 的RowKey 順序

現(xiàn)在我們以相同的 SQL 在這兩個 Cube 上進行查詢可缚,比較查詢用時霎迫。

select S_SUPPKEY, C_CUSTKEY, sum(LO_EXTENDEDPRICE) as m1

from P_LINEORDER

??? left join SUPPLIER on P_LINEORDER.LO_SUPPKEY = SUPPLIER.S_SUPPKEY

??? left join CUSTOMER on P_LINEORDER.LO_CUSTKEY = CUSTOMER.C_CUSTKEY

WHERE (LO_ORDERKEY > 1799905 and? LO_ORDERKEY < 1799915)? or (LO_ORDERKEY > 1999905 and? LO_ORDERKEY < 1999935)

GROUP BY S_SUPPKEY, C_CUSTKEY;

下圖是它們查詢時的耗時和掃描的數(shù)據(jù)量。

圖7?Cube1 查詢?nèi)罩?/p>

圖8 Cube2查詢?nèi)罩?/p>

從上面的測試結(jié)果看帘靡,對于相同的 SQL 語句知给,兩者查詢用時相差兩百多倍。兩者差別的原因主要在于對 Cube2 所在HTable 進行了更大范圍的掃描测柠。

此外炼鞠,Kylin的多個度量值被存儲到一個 Key 對應(yīng)的 Value,當(dāng)只查詢單個度量時轰胁,不需要的度量也會被讀取谒主,消耗不必要的IO≡叻В總之霎肯,HBase 的局限擎颖,加大了 Kylin 對用戶,尤其是業(yè)務(wù)用戶的使用難度观游。

如果使用純列式的存儲和多維度索引搂捧,將大大提升 Kylin 查詢性能,同時減小Kylin 的使用難度懂缕。從上面的 Druid 的優(yōu)點介紹我們得知 Druid 正好符合列式+多維度索引這樣的特征允跑。因此美團 Kylin 開發(fā)團隊決定嘗試使用 Druid 替換 HBase。

到這里搪柑,讀者可能會問聋丝,為什么不直接使用 Druid 呢?美團的工程師也分享了他們的經(jīng)驗工碾,主要有以下考慮:

Druid 的原生查詢語句是自定義的 JSON 格式弱睦,不是 SQL,上手有難度渊额;雖然 Druid 社區(qū)后來加入了對 SQL 的支持况木,但是功能尚不完整,不能滿足數(shù)據(jù)分析師的復(fù)雜 SQL 查詢需求旬迹。而Kylin 原生支持 ANSI-SQL火惊,使用 Apache Calcite 做語法解析,對SQL 有很好的支持(支持 join舱权,sub query矗晃,window function 等),并且提供 ODBC/JDBC driver 等標(biāo)準(zhǔn)入口宴倍,支持跟 Tableau, Power BI, Superset张症,Redash 等工具直接對接。

Druid 只支持單表查詢鸵贬,而實際業(yè)務(wù)中多表 join 的場景非常多俗他,難以滿足業(yè)務(wù)需要;而Kylin 支持星型模型和雪花模型阔逼,能滿足多表查詢的形式兆衅。

Druid 不能支持精確去重計算;而 Kylin 既支持基于 HyperLogLog 的近似去重嗜浮,也支持基于 Bitmap 的精確去重度量羡亩,對于某些高精度要求場景,Kylin 幾乎成了唯一選擇危融。

Druid 的 rollup 功能只支持預(yù)計算出 Base Cuboid畏铆;相比而言,Kylin 可以定制更多的更豐富的維度組合吉殃,更加精確地匹配查詢辞居,利于減少現(xiàn)場計算的計算量楷怒。

此外從對 Druid 和 Kylin 的使用經(jīng)驗看,直接使用Druid 作為 OLAP 引擎在管理和運維方面有一些挑戰(zhàn):

Druid 沒有供業(yè)務(wù)人員使用的 Web GUI瓦灶,要建立新模型鸠删,只能通過API 來完成,用戶友好度低贼陶。而 Kylin 提供了易用的 Web GUI刃泡,業(yè)務(wù)人員通過鼠標(biāo)點選就可以創(chuàng)建新模型,然后使用 SQL 進行查詢碉怔,易用性高捅僵,在進行簡單培訓(xùn)后可以交給業(yè)務(wù)人員自助使用。

Druid 沒有友好的集群監(jiān)控和管理界面眨层,運維難度較大。而 Kylin 基于Hadoop 平臺上荡,主流 Hadoop 在監(jiān)控管理上已經(jīng)非常完善趴樱,有 Ambari, Cloudera Manager 等工具使用。

Druid 需要部署和配置專門的集群酪捡,無法利用現(xiàn)有的 Hadoop 集群的計算資源叁征。而大型企業(yè)通常已經(jīng)部署了Hadoop 集群,使用 YARN/Mesos/Kubernets 等標(biāo)準(zhǔn)資源管理器統(tǒng)一管理計算資源逛薇;從這一點來說捺疼,Druid 需要單獨部署和運維。而 Kylin 基于 MapReduce 或 Spark 做數(shù)據(jù)加工永罚,能夠共享 Hadoop 集群的計算資源啤呼,做到動態(tài)調(diào)度,資源使用率高呢袱,無需額外運維成本官扣。

因此,把 Druid優(yōu)秀的列式存儲特性羞福,和 Kylin 在易用性惕蹄、兼容性和完備性相結(jié)合,看上去將是一個不錯 OLAP 解決方案治专。Druid 使用了列式存儲和倒排索引卖陵,過濾性能優(yōu)于 HBase,并且 Druid 天生具有 OLAP的特性张峰,也具有良好的二次聚合能力泪蔫。于是,美團點評技術(shù)團隊決定進行嘗試挟炬,用 Druid 替換 HBase作為 Kylin 的存儲鸥滨。

Kylin on Druid 的設(shè)計介紹

Apache Kylin 1.5 引入了可插拔架構(gòu)嗦哆,將計算和存儲等模塊做了解耦,使得開發(fā)替代 HBase 的存儲引擎變成可能婿滓。在這里我結(jié)合美團工程師康凱森的設(shè)計文檔老速,簡要介紹Kylin on Druid 的主體設(shè)計思想(圖9和圖10來自于參考[1]的附件,文字說明部分來自于參考鏈接中的[1]和[3])凸主。

構(gòu)建Cube的流程

生成 Cuboid 數(shù)據(jù)文件前橘券,增加計算 Druid Segment 數(shù)量和更新 Druid Rule 的步驟。

和原先的構(gòu)建流程一樣卿吐,通過 MapReduce 生成Cuboid 文件旁舰。

將原有的步驟“轉(zhuǎn)換為HFile”替換為“轉(zhuǎn)換為 Druid Segment ”,該步驟將構(gòu)建好的 Cuboid 文件轉(zhuǎn)化為Druid 的列存格式嗡官,輸出到 HDFS 指定路徑(下圖 1號線條)箭窜。

發(fā)布 Druid Segment 的元數(shù)據(jù)到 Druid 元數(shù)據(jù)存儲(下圖 2號線條)。

Druid Coordinator 會周期性檢查元數(shù)據(jù)存儲的新Segment(下圖 3號線條)衍腥,發(fā)現(xiàn)新的 Segment 會通知 Historical(下圖 4號線條)磺樱,Historical 收到通知會去 HDFS 拉取 Segment 數(shù)據(jù)文件到本地并且加載(下圖 5號線條)。

等到全部 Druid Segment 被加載完畢后婆咸,Cube 完成構(gòu)建竹捉。

圖9 構(gòu)建Cube 流程

查詢 Cube 的流程

當(dāng) Kylin Query Server 查詢數(shù)據(jù)時,經(jīng)過Calcite 解析后的 query plan Druid 的查詢(scan 或者groupby)尚骄,并且將請求發(fā)送給 Druid Broker块差。

Druid Broker 會解析請求找到對應(yīng)的 Historical 分發(fā)請求,并且對 Historical 返回的結(jié)果再做一次聚合倔丈。

Kylin Query Server 通過 HTTP 獲取到 Druid Broker 返回的結(jié)果憨闰,會轉(zhuǎn)化為 Tuple 再交由 Calcite 遍歷處理。

圖10 查詢Cube 流程

Schema 映射

Kylin 的一個 Cube 會被映射到 Druid 的一個 Data Source

Kylin 的一個 Segment 會被映射到 Druid 的一到多個 Segment

Kylin 的分區(qū)時間列映射到 Druid 的時間戳列

Kylin 的 Cuboid 映射到 Druid 的單個維度列

Kylin 的維度列映射到 Druid 的維度列

Kylin 的度量列映射到 Druid 的度量列

總結(jié)

在這篇文章里乃沙,我們首先分析了Kylin 和 Druid 各自的特點和優(yōu)勢起趾,以及Kylin on HBase 在一些情況下性能不佳的原因;然后基于癥狀尋找解決辦法警儒,得出使用 Druid 作為 Kylin 存儲引擎的可行方案训裆;接下來分析了美團開發(fā)的 Kylin on Druid 的架構(gòu)和流程。關(guān)于 Kylin on Druid 的使用方式和性能分析蜀铲,以及Kylin on Druid 目前有哪些尚待完善的部分边琉,請期待下篇文章。

如何使用Kylin on Druid

準(zhǔn)備階段

? 準(zhǔn)備一個 Druid 集群记劝,并且注意以下幾點: a) 使用 MySQL 作為元數(shù)據(jù)存儲 b) 使用 HDFS 作為 Deep Storage c) Druid 版本至少為 0.11 d) 因為數(shù)據(jù)存儲和聚合都在 Historical 執(zhí)行变姨,需要將主要的資源分配給 Historical(Middle Manager 和 Overload 在 KOD 中并不被使用)

從 Kylin 的 Github 倉庫獲取 kylin-on-druid 分支的最新代碼并打包。

修改 kylin.properties厌丑,增加配置項定欧。 請參考: https://github.com/apache/kylin/blob/kylin-on-druid/storage-druid/README.md渔呵,以下僅列舉主要配置 a) kylin.storage.druid.coordinator-addresses 指定了 Druid 的 coordinator 節(jié)點地址 b) kylin.storage.druid.broker-host 指定了 Druid 的 Broker 節(jié)點地址 c) kylin.storage.druid.mysql-url 指定了作為 Druid 元數(shù)據(jù)存儲的 MySQL 的 JDBC url d) kylin.storage.druid.mysql-seg-table 指定了 Druid 元數(shù)據(jù)存儲 segment 信息的 MySQL 表名 e) kylin.storage.druid.hdfs-location 指定了 Druid Segment 文件在 HDFS 的存儲路徑 以下是測試環(huán)境的配置: 圖 1 Kylin 配置文件

按照正常的啟動方式啟動Kylin。

構(gòu)建 Cube 階段

1.?在 Cube Design 界面的第五步(高級設(shè)置)設(shè)置 Cube Engine 和 Cube Storage 分別為 MapReduce 和 Druid砍鸠。Cube 設(shè)置全部完成后扩氢,選擇“ Build Cube ”。

圖 2 高級設(shè)置中的 Cube Storage 選項

2. 觀察 Cube 構(gòu)建過程爷辱,等待構(gòu)建完成录豺,以下展示了構(gòu)建 Cube 各個新增步驟的說明和步驟運行成功時的輸出信息:

a) “Calculate Shards Info”根據(jù)配置項,計算出 Druid Segment File 的數(shù)量饭弓。

圖 3 Calculate Shards Info

從 Output 看出這里設(shè)置為 2 個 Segment File双饥,每個約 500 MB。

圖 4 Calculate Shards Info 輸出

b)? “Update Druid Tier” 更新 Druid Tier 的 Rule

圖 5 Update Druid Tier

圖 6 Update Druid Tier 輸出

c) “Convert Cuboid to Druid” 啟動一個 MapReduce Job弟断,將 Cuboid 文件轉(zhuǎn)為 Druid 的列式存儲格式咏花,生成數(shù)據(jù)放到 HDFS 的指定目錄

圖 7 Convert Cuboid to Druid

MapReduce Job 的統(tǒng)計數(shù)據(jù)

圖 8 Convert Cuboid to Druid 輸出

該步驟結(jié)束時可以檢查到文件已經(jīng)存在于 HDFS 上。

圖 9 Convert Cuboid to Druid 生成文件

d) “Load Segment to Druid” 通過 MySQL 來向 Druid 集群 announce 新的 Druid Segment阀趴,等到 Segment 已經(jīng)完全被分發(fā)到各個 Druid Historical 才結(jié)束該 step迟螺。

圖 10 Load Segment to Druid

從 Output 看到,首先修改 MySQL 元數(shù)據(jù)信息花費了 0.11 秒舍咖,然后等待 Druid 集群將上步生成的兩個 segment 文件 download 到 Historical,這個過程時間約為兩分鐘锉桑。

圖 11 Load Segment to Druid 輸出

運行過程中觀察 Coordinator Web UI排霉,可以看到 Data Source 的圖標(biāo)從紅色變成藍色。

圖 12 Coordinator Web UI

e)? Cube 構(gòu)建完成

圖 13 Cube 構(gòu)建完成

f)? ?檢查 Druid Segment 狀態(tài)和分布民轴,檢查 Schema 是否正確(可選)攻柠;通過 Druid API 查看 Cube 對應(yīng)的 Druid Data Source 的元數(shù)據(jù)。

圖 14 Data Source Schema

通過 Druid API 查看 Druid Segments 的明細數(shù)據(jù)后裸。

圖 15 Data Source Data

檢查單個節(jié)點的上已經(jīng)從 Deep Storage 下載下來的 Segment 數(shù)據(jù)文件瑰钮。

圖 16 Local Cache

Kylin on Druid 的查詢時長對比

我們在測試環(huán)境下基于 SSB 數(shù)據(jù)構(gòu)建不同 Cube,通過比較在不同 Cube 上相同 SQL 的查詢用時微驶,來了解使用 Kylin on Druid 對查詢用時的影響浪谴。

我們使用 SSB 生成測試數(shù)據(jù),數(shù)據(jù)量 29,999,795因苹。

Druid 集群規(guī)格如下:

8 臺虛擬機(8core, 65GB Memory)苟耻,其中一臺部署 Overlord 和 Coordinator,1 臺部署 Broker扶檐,6 臺部署 Middle Manager 和 Historical凶杖,其中 Historical 配置參數(shù)如下。

圖 17 Historical JVM 參數(shù)

圖 18 Historical 參數(shù)

以下為三種 Cube 構(gòu)建方案的描述

Druid Base(綠色列指的是使用 Druid 作為存儲款筑,只構(gòu)建 Base Cuboid

HBase Base(藍色列)指的是使用 HBase 作為存儲智蝠,只構(gòu)建 Base Cuboid

HBase Default(紅色列)指的是使用 kylin-ssb 默認(rèn)的 cube 元數(shù)據(jù)的構(gòu)建方案

下圖為三種方案構(gòu)建的 Cube 在不同查詢語句下的平均查詢用時對比

圖 19 SSB 查詢時長

圖 20 SSB 查詢時長-折線圖

結(jié)論

關(guān)于構(gòu)建 Cube 時間和 MapReduce 內(nèi)存隙姿,使用 Druid 占用資源略多∩涓唬基于 Druid 只構(gòu)建 base cuboid 得到的 Cube费变,與基于 HBase 根據(jù)復(fù)雜剪枝設(shè)置得到的 Cube 有了相當(dāng)?shù)牟樵冃阅堋毛秘?梢?b>利用 Druid 高效的 filter 和 scan饭寺,Kylin 的現(xiàn)場計算能力有了十分明顯的提升。而如果 Cube 設(shè)計得當(dāng)叫挟,且計算較多 Cuboid 的話艰匙,HBase 的性能跟 Druid 不分伯仲。

美團 Kylin on Druid 的線上環(huán)境表現(xiàn)

美團點評是 Apache Kylin 的重度用戶抹恳,Kylin 覆蓋了美團點評主要業(yè)務(wù)線员凝,截止 2018 年 8 月的數(shù)字,每天的查詢次數(shù)超過 380 萬次奋献。美團第一批上線使用 Kylin on Druid 后健霹,Cube 存儲使用減少了約 79%,構(gòu)建過程的內(nèi)存和 CPU 使用減少了 20% 左右瓶蚂;從查詢時長觀察糖埋,大部分的查詢用時減少了 50% 以上(圖21來自于 Kylin 北京 Meetup 上康凱森的分享內(nèi)容)。

圖 21 Kylin Meetup PPT

Kylin on Druid 的總結(jié)

目前 Kylin on Druid 的限制和要求

要求 Druid 使用 MySQL 作為元數(shù)據(jù)存儲窃这,使用 HDFS 作為分布式存儲

?Druid 需要 0.11 版本或者以上瞳别,Java 需要 JDK8 或者以上

Cube 構(gòu)建目前只支持 MapReduce

Cuboid 數(shù)量相同時,Kylin on Druid 較使用 HBase 構(gòu)建 Cube 而言杭攻,時間和計算資源使用一般稍多

Measure 尚不能完全支持祟敛,美團近期即將開源的包括 EXTENDED_COLUMN、Count Distinct(BitSet)兆解,這些 Measure 需要以向 Druid 添加擴展的方式支持馆铁;Count Distinct(HyperLogLog) 后續(xù)根據(jù)需求開發(fā)

Decimal 類型在 Druid 端使用 double 替換,美團近期也會提供準(zhǔn)確的 Decimal 類型支持

轉(zhuǎn)換為 Druid Segment 步驟使用內(nèi)存比轉(zhuǎn)HFile更多锅睛,一般需要分配更多內(nèi)存

Kylin on Druid 的優(yōu)勢

1.? 查詢時無需加載字典埠巨,因此相比 Kylin on HBase 查詢穩(wěn)定性更高

2.? 存儲層支持業(yè)務(wù)隔離

3.? 億級及以下數(shù)據(jù)只需構(gòu)建 Base Cuboid

4.? 構(gòu)建資源使用減少(因為需要構(gòu)建的 Cuboid 數(shù)量減少了),查詢時長減少(因為現(xiàn)場計算能力有了比較好的提升)

何時使用Kylin on Druid

1.? 對 Druid 有充分的理解现拒,有足夠的經(jīng)驗去部署和運維 Druid 集群

2.? 有足夠的機器資源部署Druid

3.? 查詢沒有較為固定的模式乖订,因此大部分查詢難以精確匹配Cube預(yù)計算得到的維度組合,可以利用Kylin on Druid來加速現(xiàn)場計算能力

4.? 對查詢響應(yīng)速度有較高的要求

總結(jié)

在這兩篇文章中具练,我們一步一步分析 Kylin 目前使用 HBase 作為存儲的不足之處乍构,同時比較了 Kylin 和 Druid 各自的特點,得出了將兩者相結(jié)合的 Kylin on Druid 的方案。

隨后介紹了美團開發(fā)的 KOD 使用方式哥遮,通過不同 Cube 構(gòu)建方案的查詢時長對比岂丘,得出 KOD 較原有 HBase 存儲有較大性能和易用性提升的結(jié)論。最后總結(jié)了 KOD 的優(yōu)勢和使用經(jīng)驗眠饮,也了解到 KOD 目前有部分功能尚未完成奥帘。

目前這部分代碼在 Kylin 的 Git 倉庫的“ kylin-on-druid ”分支,歡迎廣大開發(fā)者試用并積極參與開發(fā)和改進仪召,更多問題可以發(fā)送到 Kylin 開發(fā)者郵件群組 dev@kylin.apache.org 進行討論寨蹋,謝謝大家。

參考鏈接

https://issues.apache.org/jira/projects/KYLIN/issues/KYLIN-3694

https://github.com/apache/kylin/tree/kylin-on-druid

https://blog.bcmeng.com/post/kylin-on-druid.html

http://druid.io/docs/latest/design

原文鏈接:

https://kyligence.io/zh/blog/why-meituan-develop-kylin-on-druid-i/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末扔茅,一起剝皮案震驚了整個濱河市已旧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌召娜,老刑警劉巖运褪,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異玖瘸,居然都是意外死亡秸讹,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門雅倒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來璃诀,“玉大人,你說我怎么就攤上這事蔑匣∥穆玻” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵殖演,是天一觀的道長。 經(jīng)常有香客問我年鸳,道長趴久,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任搔确,我火速辦了婚禮彼棍,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘膳算。我一直安慰自己座硕,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布涕蜂。 她就那樣靜靜地躺著华匾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪机隙。 梳的紋絲不亂的頭發(fā)上蜘拉,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天萨西,我揣著相機與錄音,去河邊找鬼旭旭。 笑死谎脯,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的持寄。 我是一名探鬼主播源梭,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼稍味!你這毒婦竟也來了废麻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤仲闽,失蹤者是張志新(化名)和其女友劉穎脑溢,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體赖欣,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡屑彻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了顶吮。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片社牲。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖悴了,靈堂內(nèi)的尸體忽然破棺而出搏恤,到底是詐尸還是另有隱情,我是刑警寧澤湃交,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布熟空,位于F島的核電站,受9級特大地震影響搞莺,放射性物質(zhì)發(fā)生泄漏息罗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一才沧、第九天 我趴在偏房一處隱蔽的房頂上張望迈喉。 院中可真熱鬧,春花似錦温圆、人聲如沸挨摸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽得运。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間澈圈,已是汗流浹背彬檀。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留瞬女,地道東北人窍帝。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像诽偷,于是被迫代替她去往敵國和親坤学。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容