蓝月亮四肖中特

about云開發

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

打印 上一主題 下一主題

[介紹解說] Kylin講的最明白的一篇文章

[復制鏈接]
跳轉到指定樓層
樓主
阿飛 發表于 2020-1-16 21:00:42 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
問題導讀

1.Apache Kylin 是什么?
2.Kylin如何實現超大數據集的秒級多維分析查詢?
3.Kylin的預計算是如何實現的?
4.Cube 和 Cuboid是什么?

本文主要介紹了Apache Kylin是如何將Hive表中的數據轉化為HBase的KV結構,并簡單介紹了Kylin的SQL查詢是如何轉化為HBase的Scan操作。

Apache Kylin 是什么

Apache Kylin是一個開源的、基于Hadoop生態系統的OLAP查詢引擎,能夠通過SQL接口對十億、甚至百億行的超大數據集實現秒級的多維分析查詢。

OLAP 是什么

即聯機分析處理:以復雜的分析型查詢為主,需要掃描,聚合大量數據。

Kylin如何實現超大數據集的秒級多維分析查詢

預計算

對于超大數據集的復雜查詢,既然現場計算需要花費較長時間,那么根據空間換時間的原理,我們就可以提前將所有可能的計算結果計算并存儲下來,從而實現超大數據集的秒級多維分析查詢。

Kylin的預計算是如何實現的

將數據源Hive表中的數據按照指定的維度和指標 由計算引擎MapReduce離線計算出所有可能的查詢結果(即Cube)存儲到HBase中。

Cube 和 Cuboid是什么

簡單地說,一個cube就是一個Hive表的數據按照指定維度與指標計算出的所有組合結果。

其中每一種維度組合稱為cuboid,一個cuboid包含一種具體維度組合下所有指標的值。

如下圖,整個立方體稱為1個cube,立方體中每個網格點稱為1個cuboid,圖中(A,B,C,D)和(A,D)都是cuboid,特別的,(A,B,C,D)稱為Base cuboid。cube的計算過程是逐層計算的,首先計算Base cuboid,然后計算維度數依次減少,逐層向下計算每層的cuboid。




Cuboid 的維度和指標如何轉換為HBase的KV結構

簡單的說Cuboid的維度會映射為HBase的Rowkey,Cuboid的指標會映射為HBase的Value。如下圖所示



圖2

如上圖原始表所示:Hive表有兩個維度列year和city,有一個指標列price。
如上圖預聚合表所示:我們具體要計算的是year和city這兩個維度所有維度組合(即4個cuboid)下的sum(priece)指標,這個指標的具體計算過程就是由MapReduce完成的。

如上圖字典編碼所示:為了節省存儲資源,Kylin對維度值進行了字典編碼。圖中將beijing和shanghai依次編碼為0和1。

如上圖HBase KV存儲所示:在計算cuboid過程中,會將Hive表的數據轉化為HBase的KV形式。Rowkey的具體格式是cuboid id + 具體的維度值(最新的Rowkey中為了并發查詢還加入了ShardKey),以預聚合表內容的第2行為例,其維度組合是(year,city),所以cuboid id就是00000011,cuboid是8位,具體維度值是1994和shanghai,所以編碼后的維度值對應上圖的字典編碼也是11,所以HBase的Rowkey就是0000001111,對應的HBase Value就是sum(priece)的具體值。

所有的cuboid計算完成后,會將cuboid轉化為HBase的KeyValue格式生成HBase的HFile,最后將HFile load進cube對應的HBase表中。

Cube示例
以手機銷售為例,表SALE記錄各手機品牌在各個國家,每年的銷售情況。表PHONE是手機品牌,表COUNTRY是國家列表,兩表通過外鍵與SALE表相關聯。這三張表就構成星型模型,其中SALE是事實表,PHONE、COUNTRY是維度表。



現在需要知道各品牌手機于2010-2012年,在中國的總銷量,那么查詢sql為:
[Bash shell] 純文本查看 復制代碼
SELECT b.`name`, c.`NAME`, SUM(a.count)
FROM SALE AS a 
LEFT JOIN PHONE AS b ON a.`pId`=b.`id` 
LEFT JOIN COUNTRY AS c ON a.`cId`=c.`id` 
WHERE a.`time` >= 2010 AND a.`time` <= 2012 AND c.`NAME` = "中國"
GROUP BY b.`NAME`


其中時間(time), 手機品牌(b.name,后文用phone代替),國家(c.name,后文用country代替)是維度,而銷售數量(a.count)是度量。手機品牌的個數可用于表示手機品牌列的基度。各手機品牌在各年各個國家的銷量可作為一個cuboid,所有的cuboid組成一個cube,如下圖所示:





上圖展示了有3個維度的cube,每個小立方體代表一個cuboid,其中存儲的是度量列聚合后的結果,比如蘋果在中國2010年的銷量就是一個cuboid。

Kylin Cube 創建教程

推薦參考
http://kylin.apache.org/cn/docs15/tutorial/create_cube.html



加微信w3aboutyun,獲取更多資源



領取100本書+1T資源
http://www.imqdzn.shop/forum.php?mod=viewthread&tid=26480

大數據5個項目視頻
http://www.imqdzn.shop/forum.php?mod=viewthread&tid=25235

名企資源、名企面試題、最新BAT面試題、專題面試題等資源匯總
http://www.imqdzn.shop/forum.php?mod=viewthread&tid=27732





您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

關閉

推薦上一條 /4 下一條

QQ|小黑屋|about云開發-學問論壇|社區 ( 京ICP備12023829號 )

GMT+8, 2020-2-26 02:22 , Processed in 1.140625 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2018 Comsenz Inc.Designed by u179

快速回復 返回頂部 返回列表
蓝月亮四肖中特 股票指数行情 倍盈配资 牛金所配资 股票型基金 股票涨跌最大的 股票分析报告 新股票发行 涨鑫宝配资 吉利汽车股票 如何网上炒股