Kylin知識(shí)整理與歸納
1. kyliy的介紹及說(shuō)明
Apache Kylin是一個(gè)開(kāi)源的分布式分析引擎卵迂,提供Hadoop之上的SQL查詢接口及多維分析(OLAP)能力以支持超大規(guī)模數(shù)據(jù)靠柑,最初由eBay 開(kāi)發(fā)并貢獻(xiàn)至開(kāi)源社區(qū)菠净。它能在亞秒內(nèi)查詢巨大的Hive表擦囊。
OLAP全稱為在線聯(lián)機(jī)分析應(yīng)用塞茅,是一種對(duì)多維數(shù)據(jù)分析查詢的解決方案歼培。目前市面上主流的OLAP引擎震蒋,包括spark,impala,sparksql躲庄,drill等沒(méi)有一個(gè)系統(tǒng)能夠滿足所有的場(chǎng)景查詢需求查剖,沒(méi)有一個(gè)系統(tǒng)能同時(shí)在數(shù)據(jù)量,性能噪窘,和靈活性三個(gè)方面做到完美笋庄。
kylin是一個(gè)基于hadoop生態(tài)圈的OLAP分析引擎,其特點(diǎn):
(1) 可擴(kuò)展
(2) 提供標(biāo)準(zhǔn)的sql交互查詢能力倔监,方便統(tǒng)計(jì)
(3) 與BI工具可無(wú)縫結(jié)合
Kylin的設(shè)計(jì)思想就是利用空間換時(shí)間直砂,通過(guò)構(gòu)建CUBE來(lái)與計(jì)算多維數(shù)據(jù),加快查詢效率浩习。Apache Kylin旨在減少Hadoop在10億及百億規(guī)模以上數(shù)據(jù)級(jí)別的情況下的查詢延遲静暂,目前底層數(shù)據(jù)存儲(chǔ)基于HBase,具有較強(qiáng)的可伸縮性谱秽。
2. 公司成功應(yīng)用場(chǎng)景
(1) kylin在美團(tuán)的應(yīng)用
美團(tuán)的業(yè)務(wù)業(yè)務(wù)推廣線都是基于kylin的解決方案洽蛀,截至16年底,生產(chǎn)環(huán)境共有214個(gè)Cube疟赊,包含的數(shù)據(jù)總行數(shù)為2853億行郊供,Cube在HBase中的存儲(chǔ)有59TB。日查詢次數(shù)超過(guò)了50萬(wàn)次近哟,TP50查詢時(shí)延87ms驮审,TP99時(shí)延1266ms,很好地滿足了對(duì)性能的要求椅挣。
3. 安裝及使用
3.1 安裝
(1)下載kylin 的安裝包:http://kylin.apache.org/download
(2) 解壓kylin到指定的路徑: /usr/hdp/2.6.1.0-129/kylin/
(3) 設(shè)置KYLIN_HOME的環(huán)境變量
(4) 執(zhí)行$KYLIN_HOME/bin/check-env.sh? 檢查環(huán)境
(5) 啟動(dòng)kylin 服務(wù)? $KYLIN_HOME/bin/kylin.sh start
(6) 頁(yè)面查看kylin的服務(wù):http://125.64.43.160:7070/kylin
3.2 使用kylin構(gòu)建cube
3.2.1 創(chuàng)建project
創(chuàng)建完project后头岔,通過(guò)下拉框選擇對(duì)應(yīng)的project
這個(gè)時(shí)候面板還是空白,需要選擇選擇數(shù)據(jù)源鼠证,有3中方式:
(1) load hive table metastore:手動(dòng)指定hive的表(database.tablename)峡竣,多個(gè)表以,分割
(2) load hive table from tree
自動(dòng)展現(xiàn)hive的庫(kù)及表,可以選擇多個(gè)
(3) add streaming table:后面篇幅介紹
3.2.2 構(gòu)建model
(1) 點(diǎn)擊model –> new model 新建model
(2) 輸入model info量九,選擇實(shí)時(shí)表
注:實(shí)時(shí)表支持關(guān)聯(lián)表适掰,而streaming table則不支持
(3) 選擇維度列
(4) 選擇指標(biāo)
(5) 指定分區(qū)及過(guò)濾條件
沒(méi)有分區(qū)則不填寫
至此颂碧,model構(gòu)建完成,在model下类浪,可以對(duì)model進(jìn)行管理载城,
3.2.3 構(gòu)建cube
(1) 點(diǎn)擊model -> model->new cube新建cube
(2) cube info 指定cube所需要的model信息
(3) 添加維度
(4) 填寫統(tǒng)計(jì)指標(biāo)
(5) 構(gòu)建完成cube
3.2.4 build cube? 與計(jì)算數(shù)據(jù)
(1)點(diǎn)擊action -> build
(2) 點(diǎn)擊monitor 查看bulid 狀態(tài)
3.2.5 查看cube情況
3.2.6 查詢cube
3.3 基于kafka構(gòu)建實(shí)時(shí)流cube
(1) 添加流數(shù)據(jù)源
(2) 創(chuàng)建kafka 的topic ,用于生產(chǎn)流數(shù)據(jù)
kafka-topics.sh --create --zookeeper node51:2181 --replication-factor 1 --partitions 1 --topic kylin_demo
(3) 通過(guò)topic生產(chǎn)數(shù)據(jù)
./kylin.sh org.apache.kylin.source.kafka.util.KafkaSampleProducer --topic kylin_demo --broker node51:6667 —delay 0
通過(guò)消費(fèi)端消費(fèi)數(shù)據(jù)(驗(yàn)證數(shù)據(jù)成功傳送)
./kylin.sh org.apache.kylin.source.kafka.util.KafkaSampleProducer --topic kylin_demo --broker node51:6667 —delay 0
(4) 構(gòu)建流數(shù)據(jù)schema
從消費(fèi)端截取一條樣例消息费就,粘貼到j(luò)son中诉瓦,kylin自動(dòng)解析schema表,并指定表名
(5) 指定kafka集群信息力细,及添加流數(shù)據(jù)topic
(6) 構(gòu)建cube類似于普通的hive表構(gòu)建(同上)
(7) Building cube
3.4 定時(shí)執(zhí)行cube build
Kylin web 觸發(fā)指令只能支持一次觸發(fā)睬澡,在實(shí)際應(yīng)用中,需要定時(shí)執(zhí)行build任務(wù)眠蚂,可以使用curl命令從后臺(tái)觸發(fā)cube的構(gòu)建煞聪,可以借助crontab 或者其他的調(diào)度工具
Eg:
*/20 * * * * curl -X PUT --user ADMIN:KYLIN -H "Content-Type: application/json;charset=utf-8" -d '{ "sourceOffsetStart": 0, "sourceOffsetEnd": 9223372036854775807, "buildType": "BUILD"}' http://node51:7070/kylin/api/cubes/cube_kylin_kafka/build2
說(shuō)明:
(1) sourceOffsetStart 和sourceOffsetEnd指定了構(gòu)建的范圍,這里的offset是kylin的內(nèi)部概念逝慧,也支持kafka offset 來(lái)定義構(gòu)建的邊界昔脯。
(2) sourceOffsetStart=0 代表著從最近一次構(gòu)建成功的offset來(lái)繼續(xù)構(gòu)建,如果沒(méi)有值笛臣,則從kafka最早的offset開(kāi)始構(gòu)建
(3) sourceOffsetEnd=9223372036854775807 是long型的最大值云稚,標(biāo)識(shí)構(gòu)建會(huì)持續(xù)到當(dāng)下最新的offset
4. Kylin原理說(shuō)明
4.1 kylin 是一個(gè)開(kāi)源的分布式分析引擎,提供hadoop之上的sql查詢接口及多維分析捐祠,支持超大規(guī)模數(shù)據(jù)能力碱鳞。
4.2 cube
Cube是一種典型的多維數(shù)據(jù)分析技術(shù),一個(gè)CUBE可以有多個(gè)事實(shí)表踱蛀,多個(gè)維表構(gòu)成:
4.2.1 cube是維度的組合,任一維度的組合稱為cubeoid贵白,有N個(gè)維度的cube,那么就有2的n次方的維度組合
4.2.2 cube的構(gòu)建過(guò)程率拒,其實(shí)是將所有的維度組合事先計(jì)算,存儲(chǔ)在Hbase中禁荒,以空間交換時(shí)間猬膨,Htable對(duì)應(yīng)的rowkey,就是各種維度組合呛伴,指標(biāo)存在column中勃痴,這樣將不同維度組合的查詢sql,轉(zhuǎn)換成rowkey的范圍掃描热康,然后對(duì)指標(biāo)進(jìn)行匯總計(jì)算沛申。
4.2.3 kylin構(gòu)建cube過(guò)程
(1)根據(jù)cube定義的事實(shí)表和維表,在hive中生成一張臨時(shí)中間表
(2)使用mapreduce姐军,從事實(shí)表中抽取維度的distinct值铁材,并以字典樹(shù)的方式壓縮編碼尖淘,同時(shí)也對(duì)所有維度表進(jìn)行壓縮編碼,生成維度字典
(3)計(jì)算和統(tǒng)計(jì)所有的維度組合著觉,并保存
(4)創(chuàng)建Hbase table
(5)利用hive中間臨時(shí)表村生,使用mr,生成每種維度組合的數(shù)據(jù)饼丘,將其轉(zhuǎn)換為Hfile趁桃,并導(dǎo)入到Hbase table中
(6)更新cube信息,清理中間表
4.2.4 增量cubeing
Kylin使用了一種增量cubing技術(shù)來(lái)進(jìn)行cube數(shù)據(jù)的疊加肄鸽,kylin根據(jù)時(shí)間段劃分為多個(gè)segment镇辉,cube每次構(gòu)建都會(huì)生成一個(gè)新的segment,增量cubing依賴已有的cube segment,在segment數(shù)目到達(dá)一定數(shù)量后盡可能會(huì)進(jìn)行合并操作贴捡,合并成一個(gè)新的大的cube segment 來(lái)替代忽肛,Merge操作是一個(gè)異步的在線操作,不會(huì)對(duì)前端的查詢業(yè)務(wù)產(chǎn)生影響烂斋。
合并操作步驟:
(1) 遍歷指定的cube segment
(2) 合并維度字典目錄和維度表快照
(3) 利用mapreduce 合并各種維度組合cuboid
(4) 將cuboid轉(zhuǎn)換為Hfile ,生成新的Htable ,替代原來(lái)的多個(gè)Htable
5. 注意事項(xiàng)
5.1 事實(shí)表的準(zhǔn)備
Kylin只支持簡(jiǎn)單的聚合函數(shù)屹逛,sum,count等,盡量在hive中做好預(yù)處理汛骂。對(duì)于維表比較大的情況罕模,或者查詢的邏輯復(fù)雜判斷的,或者kylin不支持的語(yǔ)法的帘瞭,可以事先將事實(shí)表和維表管理處理創(chuàng)建為hive的視圖淑掌,之后根據(jù)視圖來(lái)創(chuàng)建cube模型。
5.2 cube構(gòu)建的高級(jí)設(shè)置
cube的計(jì)算量主要跟維度個(gè)數(shù)蝶念、維度基數(shù)緊密相關(guān)抛腕,盡量減少不必要的維度組合計(jì)算。
(1) Mandotary - 必需的維度:每次查詢必然要帶的條件建議在字典設(shè)置為Manadatory,故認(rèn)為所有的查詢都會(huì)包含有此維度媒殉,對(duì)于不包含此維度的組合担敌,在構(gòu)建cube時(shí)不會(huì)被計(jì)算,這樣最終build出來(lái)的cube的大小會(huì)減少一半廷蓉。
(2) Hierarchy - 層級(jí)維度:一些列具有層次關(guān)系的維度組成一個(gè)Hierachy全封,例如年,月桃犬,日等刹悴,如果不設(shè)置Hierachy,會(huì)形成各個(gè)維度的組合cuboid攒暇,設(shè)置了Hierachy后cuboid增加了一個(gè)約束土匀,那些不滿足層級(jí)的組合會(huì)被剪枝。
Eg:如果A, B, C是層級(jí)扯饶,并且A>B>C恒削,那么只需要計(jì)算組合A, AB, ABC; 其它組合如B, C, BC, AC將不做預(yù)計(jì)算池颈。
(3) Derived - 衍生維度:維度表的列值,可以從它的主鍵值衍生而來(lái)钓丰,那么通過(guò)將這些列定義為衍生維度躯砰,可以僅將主鍵加入到Cube的預(yù)計(jì)算來(lái),而在運(yùn)行時(shí)通過(guò)使用維度表的快照携丁,衍生出非PK列的值琢歇,從而起到降維的效果。
(4) Joint Dimensions
將維度進(jìn)行分組梦鉴,以達(dá)到降低維度組合數(shù)目的手段李茫,不同分組的維度之間不會(huì)進(jìn)行組合計(jì)算.將經(jīng)常一起出現(xiàn)的組合維度放在同一維度組中,將從不一起出現(xiàn)的維度設(shè)置在不同的維度組中肥橙。
Group分組的優(yōu)化措施與查詢sql習(xí)慣緊密依賴魄宏,即訂制優(yōu)化,如果查詢的維度是跨組的存筏,那么需要付出更大的代價(jià)來(lái)獲取結(jié)果
(4)cube中rowkey順序:按照查詢頻率從高到低宠互,從前往后排,Mandatory維度椭坚,Where過(guò)濾條件中出現(xiàn)頻率較多的維度予跌,高基數(shù)維度,低基數(shù)維度善茎。