日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

深入 Apache Kylin Cube 与查询优化

發布時間:2025/3/8 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深入 Apache Kylin Cube 与查询优化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

近幾年,Apache Kylin作為一個高速的開源分布式大數據查詢引擎正在迅速崛起。它充分發揮Hadoop、Spark、HBase等技術的優勢,通過對超大規模數據集進行預計算,實現秒級甚至亞秒級的查詢響應時間,同時提供標準SQL接口。目前,Apache Kylin已在全球范圍得到了廣泛應用,如百度、美團、今日頭條、eBay等,支撐著單個業務上萬億規模的數據查詢業務。在超高性能的背后,Cube是至關重要的核心。一個優化得當的Cube既能滿足高速查詢的需要,又能節省集群資源。本文將從多個方面入手,介紹如何通過優化Cube提升系統性能。

1、Cube基本原理

在傳統多維分析就有多維立方體(OLAP Cube)的概念。Apache Kylin在大數據領域對Cube進行了擴展,通過執行 MapReduce/Spark任務構建Cube,對業務所需的維度組合和度量進行預聚合,當查詢到達時直接訪問預計算聚合結果,省去對大數據的掃描和運算,這就是Apache Kylin高性能查詢的基本實現原理。

如圖1所示,Apache Kylin會對SQL的查詢計劃進行改寫,把源表掃描、多表連接、指標聚合等在線計算轉換成對預計算結果的讀取,極大減少了在線計算和I/O讀寫的代價。 而查詢所訪問的預計算結果保存在Cuboid當中(見圖1紅色方框),Cuboid大小只和維度列的基數有關,和源數據行數無關,這使得查詢的時間復雜度可以取得一個量級的提升。


圖 - 1預計算查詢計劃

一個Cuboid對應著一組分析的維度,并保存了度量的聚合結果。Cube就是所有Cuboid的集合,如圖2所示,每個節點代表一個Cuboid。當查詢到達,Apache Kylin會根據SQL所使用的維度列在Cube中選擇最合適的Cuboid,最大程度地節省查詢時間。


圖 - 2 Cube示意圖

2、Cube優化案例

社區不乏一些使用Apache Kylin的成功案例分享,但經常還會看到很多朋友遇到性能問題,例如SQL查詢過慢、Cube構建時間過長甚至失敗、Cube膨脹率過高等等。究其原因,大多數問題都是由于Cube設計不當造成的。因此,合理地進行Cube優化就顯得尤為重要。

這里先分享兩個社區用戶進行優化的案例:

案例1 – 提升Cube查詢效率

背景:某智能硬件企業使用Apache Kylin作為大數據平臺查詢引擎,對查詢性能有較高要求,希望提高查詢效率。

數據:

  • 9個維度,其中1個維度基數是千萬級,1個維度基數是百萬級,其他維度基數是10w以內
  • 單月原始數據6億條

優化方案:

  • 數據清理:將時間戳字段轉換成日期,降低維度的基數
  • 調整聚合組:不會同時在查詢中出現的維度分別包含在不同聚合組(如崩潰時間、上傳時間等)
  • 設置必須維度:把某些超低基數維度設為必須維度

優化成果:

  • 查詢性能:提升5倍
  • 構建時間:縮短30%
  • Cube大小:減小74%

案例二 – 提升Cube構建效率

背景:某金融企業使用Apache Kylin作為報表分析引擎,發現Cube膨脹率多大、構建時間過長,希望對這一情況進行改善。

硬件:20臺高配置PC服務器

數據:事實表有100多萬條記錄,度量是某些列的平均值

優化方案:

  • 維度精簡:去除查詢中不會出現的維度
  • 調整聚合組:設置多個聚合組,每個聚合組內設置多組聯合維度

優化成果:

3、Cube優化原理

從以上案例可以看出,通過Cube調優可以顯著改善Apache Kylin的構建性能、查詢性能及Cube膨脹率。那么這些改進的背后究竟是什么原理呢?

為了深入理解Cube,首先要先了解Cuboid生成樹。如圖3所示,在Cube中,所有的Cuboid組成一個樹形結構,根節點是全維度的Base Cuboid,再依次逐層聚合掉每個維度生成子Cuboid,直到出現0個維度時結束。圖3中綠色部分就是一條完整的Cuboid生成路徑。預計算的過程實際就是按照這個流程構建所有的Cuboid。


圖 - 3 Cuboid生成樹

通過這顆Cuboid生成樹,我們不難發現:當維度數量過多,就會導致Cuboid數量以指數級膨脹;如果維度基數過大,還會使所在的Cuboid結果集變大。這些都是影響Cube膨脹率和構建時間的重要因素。

但是,所有的Cuboid都是必要的嗎?實際上,在多數情況下,我們并不需要這里的每一個Cuboid,因此需要對Cuboid生成樹做剪枝。剪枝可以從兩個方面入手:數據特性、查詢需求。首先介紹數據特性,考慮下圖的兩個Cuboid,左側Cuboid包含4個維度(ABCD),右側Cuboid包含3個維度(ABC),而兩個Cuboid都包含相同(或極度相近)行數的記錄,說明讀取兩個Cuboid結果的代價是一樣的,同時左側Cuboid除了具有右側Cuboid的查詢支持能力外,還能支持帶有維度D的查詢,因此右側Cuboid就可以被去除。


圖 - 4 去除冗余Cuboid

再考慮查詢需求,在報表或多維分析場景中,有些維度是每次查詢都會出現的,如年份;有些維度總是一起出現的,如開始時間、結束時間;有些維度間是有層級關系的,如商品分類或地理信息。充分利用查詢的這些實際需求也能去除不需要的Cuboid,例如:如果年份是必要的,那么所有不包含年份維度的Cuboid都可以被去除;如果兩個維度總是同時出現,那么這這些維度單獨出現的Cuboid就可以被去除。

在Apache Kylin中,可以通過設置Cube的維度組合規則來去除無用的Cuboid。首先,可以通過定義(1)聚合組對維度分組,只在每個聚合組內生成Cuboid。此外,在單個聚合組內部,還可以設置維度組合規則,如:(2)必須維度用于定義一定出現的維度、(3)聯合維度用于定義一組同時出現的維度、(4)層級維度用于定義一組有層級關系的維度,詳細的Cuboid生成規則如下圖所示:


圖 - 5聚合組規則

(5)衍生維度

維表中可以由主鍵推導出值的列可以作為衍?維度。使用場景:以星型模型接入時。例如用戶維表可以從userid推導出用戶的姓名,年齡,性別。優化效果:維度表的N個維度組合成的cuboid個數會從2的N次方降為2。

(1)聚集組

聚集組:用來控制哪些cuboid需要計算。

適用場景:不是只需要計算base cuboid的情況下,都需要聚集組。

注意事項:一個維度可以出現在多個聚集組中,但是build期間只會計算一次。

如果不設置聚集組,默認情況下只會計算 base cuboid

聚集組不宜太多。

(2)強制維度

強制維度:所有cuboid必須包含的維度,不會計算不包含強制維度的cuboid。

適用場景:可以將確定在查詢時一定會使用的維度設為強制維度。例如,時間維度。

優化效果:將一個維度設為強制維度,則cuboid個數直接減半。

(3)聯合維度

聯合維度:將幾個維度視為一個維度。

適用場景: 1 可以將確定在查詢時一定會同時使用的幾個維度設為一個聯合維度。

2 可以將基數很小的幾個維度設為一個聯合維度。

3 可以將查詢時很少使用的幾個維度設為一個聯合維度。

優化效果:將N個維度設置為聯合維度,則這N個維度組合成的cuboid個數會從2的N次方減少到1。

(4)層次維度

層次維度:具有一定層次關系的維度。

使用場景:像年,月,日;國家,省份,城市這類具有層次關系的維度。

優化效果:將N個維度設置為層次維度,則這N個維度組合成的cuboid個數會從2的N次方減少到N+1。

(6)Extended Column

在OLAP分析場景中,經常存在對某個id進行過濾,但查詢結果要展示為name的情況,比如user_id和user_name。這類問題通常有三種解決方式:

a. 將ID和Name都設置為維度,查詢語句類似select name, count(*) from table where id = 1 group by id,name。這種方式的問題是會導致維度增多,導致預計算結果膨脹;

b. 將id和name都設置為維度,并且將兩者設置為聯合。這種方式的好處是保持維度組合數不會增加,但限制了維度的其它優化,比如ID不能再被設置為強制維度或者層次維度;

c. 將ID設置為維度,Name設置為特殊的Measure,類型為Extended Column。這種方式既能保證過濾id且查詢name的需求,同時也不影響id維度的進一步優化。

所以此類需求我們推薦使用 Extended Column。

(7)HBase Rowkey順序

簡單的講,查詢頻率越高的維度在Rowkey中的順序需要越靠前。

(8)調整Cube并發粒度

當Segment中某個Cuboid的大小超出一定的閾值時,系統會將該Cuboid的數據分片到多個Hbase Region Server,從而實現Cuboid數據讀取的并行化,優化Cube的查詢速度。

kylin的默認設置中

kylin.storage.hbase.min-region-count=1,

kylin.storage.hbase.max-region-count=500,?

kylin.storage.hbase.region-cut-gb=5

在實際應用中(根據實際數據量調整),可以將

kylin.storage.hbase.min-region-count=2,

kylin.storage.hbase.max-region-count=100,

kylin.storage.hbase.region-cut-gb=1

上面設置為最小為2個分區,每個分區大小為1G,最多設置100個region分區。

Refer:

[1]?Apache Kylin 深入Cube和查詢優化

http://geek.csdn.net/news/detail/199615

[2]?Apache Kylin 維度優化指南

http://bit.ly/2llpR69

[3]?【技術帖】Apache Kylin Cube優化方式

http://bit.ly/2DqB8tg

轉載于:https://my.oschina.net/leejun2005/blog/79113

總結

以上是生活随笔為你收集整理的深入 Apache Kylin Cube 与查询优化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产欧美日韩综合精品 | 精品免费在线观看 | 国产一级二级三级在线观看 | 自拍偷拍欧美视频 | 国偷自拍 | 日韩中文字幕免费观看 | 四虎影视av | 在线亚洲观看 | 青春草在线视频免费观看 | 少妇一晚三次一区二区三区 | 无遮挡的裸体按摩的视频 | 一区二区三区日 | 成人精品一区日本无码网 | 手机av网站 | 午夜免费 | 亚洲精品97久久中文字幕 | 中文字幕在线免费播放 | 日韩骚片 | 久久久精品人妻一区二区三区色秀 | 亚洲综合自拍偷拍 | 色欧美色 | 日本人毛片 | 黄色777| 国产精品麻豆欧美日韩ww | 成人小视频免费在线观看 | 国产一区二区三区视频 | 成年人视频在线免费观看 | 丰满少妇高潮久久三区 | av影院在线观看 | 美女搞黄视频网站 | 加勒比av在线播放 | 欧美少妇一区 | 日噜噜夜噜噜 | 性爱一级视频 | 国产乱了高清露脸对白 | 久久久久久国产精品免费 | 男人的天堂一区 | 四虎5151久久欧美毛片 | 自拍偷拍五月天 | 精品国产aⅴ | 日本v片| 中国女人做爰视频 | 成年人黄色免费网站 | 8x8ⅹ8成人免费视频观看 | 亚洲午夜久久久久久久久久久 | 日本h在线观看 | 色噜噜日韩精品欧美一区二区 | 免费国产一区二区三区 | 性生活三级视频 | 91视频高清 | 婷婷综合国产 | 一本不卡 | 在线观看亚洲一区 | 免费午夜视频 | 一区二区三区在线免费视频 | 午夜不卡久久精品无码免费 | 午夜亚洲福利在线老司机 | 美女bb视频| 亚洲性影院 | 中文字幕人乱码中文字 | 色综合av在线 | 天堂va欧美ⅴa亚洲va一国产 | 亚洲免费观看高清完整版在线 | 一个人免费在线观看视频 | 国精产品一区一区三区免费视频 | 精品日本一区二区三区在线观看 | 精品黄色一级片 | 台湾综合色 | 日老女人视频 | 韩国一区二区三区在线观看 | 制服丝袜成人动漫 | 综合性色 | 一区二区三区视频播放 | 97在线观看视频 | 久久久wwww| 男人天堂成人网 | 日本视频黄色 | 亚洲综合av网 | 欧美成人三级在线 | 久久国产精品一区 | 中文在线观看高清视频 | 69视频在线 | 久久久久久久久久一区二区 | 神马久久久久久久久久 | 久久久久少妇 | 亚洲自拍网站 | 成年人视频在线免费看 | av在线视屏 | 欧美成人做爰猛烈床戏 | 亚洲av无码乱码国产精品久久 | 成人在线三级 | 夜夜操狠狠干 | 国产三级在线 | 精品国产麻豆 | 91精品国产91久久久久青草 | 亚洲精品热 | 欧美精品videos另类 | 日本在线观看免费 | 亚洲欧美日本另类 |