Apache Kylin使用總結

2021-07-22 12:57:29 字數 1440 閱讀 5712

apache kylin是一款以預處理cube來提高查詢速度的olap引擎。

首先對維度表做個簡單的介紹。

麒麟只支援星型模型,也就是說乙個事實表加上多個維度表。維度表不存在支架型結構。維度表存放的大多是描述性字段,用於篩選。其實以sql的角度來看就是group by/filter through where 的效果。對於乙個有n個維度的cube,可以構建2的n次方個cuboid。

最開始對cuboid的概念不是很清楚。看olap的概念可以有上鑽,切片之類的操作,但很少說道什麼是cuboid,和cuboid裡面到底存放什麼。

首先說下cuboid裡面存放什麼?其實就是定義那些指標,比如銷售量,貨物總量,或者說就是在麒麟建data model時的measure。那麼什麼是cuboid呢?cuboid是某些維度的組合。從包含所有的維度的base cuboid到包含0個維度的apex cuboid。

在這個cuboid中會根據維度的值對指標進行聚合,比如sum,count。比如日期維度裡有20160901-20160930這三十個值,那麼麒麟會把定義好的指標預聚合成三十個分組,當使用group by或者filter時只需要選取其中乙個或者幾個分組,再通過sql引擎進行聚合。

那麼接下來說下我們使用apache kylin時候遇到的坑吧,或者說一些我覺得比較難理解的地方。

首先kylin是乙個通過預處理的過程節省查詢時間的olap工具,也就是說是空間換時間。所以設計的資料倉儲模型盡量簡潔,把大計算量的資料轉換放到之前的etl中去進行。開始我們陷入了hive的思路,試想kylin能不能載入hive的udf。事實上是完全沒有必要的。

二是維度表中除了**鍵外都設定成derived的維度,可以節省很多空間,因為kylin自身對derived dimension做了優化。

三是如果維度基數大於一百萬,rowkey不建議使用字典,因為要載入進記憶體。當然如果使用fix_length,可能會增大cube大小。對於基數較大的維度,可以選擇sharding。sharding是一種分表分庫的資料庫儲存方法。由於底層hbase可以並行查詢,使用sharding可以提高查詢效率。

四是aggregation group需要仔細設計。通過agg可以把原來需要構建多個cube的工作簡化成構建乙個cube,多個agg,減少了mr job的開銷。實驗證明可以至少減少一半的時間。

五是如果維的基數過大時,和事實表join會報錯:scan row count exceeded threshold: 10000000, please add filter condition to narrow down backend scan range, like where clause.原因是

kylin設定了查詢時使用記憶體大小為3g,

可以在kylin.config或者server config裡新增kylin.query.mem.budget=8589934592解決。

這就是目前使用apache kylin遇到的一些坑,匆匆總結如有錯誤請拍磚

使用KyBot優化Apache Kylin儲存

spring cloud 實戰 乾貨 mybatis 實戰 乾貨 spring boot 實戰 乾貨 react 入門實戰 乾貨 構建中小型網際網路企業架構 乾貨 python 學習持續更新 elasticsearch 筆記 kafka storm 實戰 乾貨 cube資料 即預計算的結果 預設儲存...

APACHE KYLIN簡單介紹

apache kylin 概覽 apache kylin 是乙個開源的分布式分析引擎,提供hadoop之上的sql查詢介面及多維分析 olap 能力以支援超大規模資料,最初由ebay inc.開發並貢獻至開源社群。它能在亞秒內查詢巨大的hive表。kylin是什麼?可擴充套件超快olap引擎 kyl...

Apache Kylin集群部署

筆者所在的公司,目前打算在測試 生產環境上面部署apache kylin集群,注意以下幾點 1 kylin.server.mode all,job,query 這個決定了當前kylin節點所擔任的角色,乙個kylin集群只能有一台作業引擎,也即只能有一台節點的這個配置專案為all或者job 可以有多...