【转】使用Apache Kylin搭建企业级开源大数据分析平台
http://www.thebigdata.cn/JieJueFangAn/30143.html
本篇文章整理自史少鋒4月23日在『1024大數(shù)據(jù)技術(shù)峰會(huì)』上的分享實(shí)錄:使用Apache Kylin搭建企業(yè)級(jí)開源大數(shù)據(jù)分析平臺(tái)。
正文如下
我先做一個(gè)簡(jiǎn)單介紹我叫史少鋒,我曾經(jīng)在IBM、eBay做過大數(shù)據(jù)、云架構(gòu)的開發(fā),現(xiàn)在是Kyligence的技術(shù)合伙人。
Kylin是這兩年在國(guó)內(nèi)發(fā)展非常快的開源大數(shù)據(jù)項(xiàng)目。今天大會(huì)合作廠商中有超過一半的企業(yè)已經(jīng)在使用或者正在試用Kylin,應(yīng)主辦方邀請(qǐng),今天跟大家做一個(gè)關(guān)于如何使用Kylin構(gòu)建開源大數(shù)據(jù)分析平臺(tái)的分享。
這是我今天的議程,分兩部分。
前半部分:
針對(duì)Kylin的初級(jí)和入門用戶介紹Kylin項(xiàng)目的由來以及技術(shù)核心。
后半部分:
介紹如何基于Kylin構(gòu)建開源大數(shù)據(jù)分析平臺(tái),把Hadoop數(shù)據(jù)平臺(tái)和業(yè)務(wù)分析系統(tǒng)連接起來。
Kylin(麒麟)是什么?我們聽到過有麒麟芯片、麒麟OS等等,我們這個(gè)全名是叫Apache Kylin,是一個(gè)大數(shù)據(jù)分析的項(xiàng)目。
從名字上或許可以猜到,它來自中國(guó),的確這也是我們想讓世界知道的,有一群來自中國(guó)的工程師在向Hadoop貢獻(xiàn)著這樣一個(gè)獨(dú)特的項(xiàng)目。
Apache Kylin 是在Hadoop之上的分布式的大數(shù)據(jù)分析引擎,它對(duì)外暴露的是標(biāo)準(zhǔn)SQL接口,支持TB到PB量級(jí)的數(shù)據(jù),以秒級(jí)甚至亞秒級(jí)的時(shí)間返回響應(yīng)。
任何一個(gè)項(xiàng)目的誕生都有一定的背景和原因。
今天我們看到越來越多的企業(yè)正在使用Hadoop,正在把Hadoop作為他們的基礎(chǔ)平臺(tái)來管理和分析數(shù)據(jù)。
但是,企業(yè)在使用Hadoop的時(shí)候,往往發(fā)現(xiàn)有一個(gè)很大的Gap:
一方面,現(xiàn)有的分析系統(tǒng)或分析工具,不能很好支持Hadoop; Hadoop上的數(shù)據(jù)的體量是遠(yuǎn)遠(yuǎn)超過傳統(tǒng)單機(jī)或者傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)的體量,原有的系統(tǒng)接入Hadoop根本無法承受這么大的數(shù)據(jù)量。
此外這些遺留系統(tǒng)當(dāng)初設(shè)計(jì)的時(shí)候就不是一個(gè)分布式的架構(gòu),沒辦法水平地?cái)U(kuò)容。
另一方面,對(duì)于數(shù)據(jù)使用者或者分析師,讓他們直接使用Hadoop,寫MapReduce或者Spark的任務(wù),是難以接受的。此外,Hadoop主要是用于做批量運(yùn)算, 通常需要幾十分鐘,最快也要幾分鐘,對(duì)于分析人員來說很難有一個(gè)好的使用體驗(yàn);等幾分鐘才能看到結(jié)果數(shù)據(jù),大大影響了他們的工作效率。
這個(gè)問題當(dāng)年就是在eBay內(nèi)部就被提出來,為此專門成立了一個(gè)項(xiàng)目。
2013年的時(shí)候,Kylin項(xiàng)目的創(chuàng)始人韓卿(Luke),授命帶著工程師研究這個(gè)難題,經(jīng)過不斷的嘗試和摸索,Kylin探索出了在Hadoop之上做預(yù)計(jì)算、做Cube這條路線,這是之前沒有人嘗試過的。
最終這個(gè)項(xiàng)目在2014年10月在Github開源 。一個(gè)月之后項(xiàng)目被Apache接受成為其一個(gè)孵化器項(xiàng)目。
2015年11月份,經(jīng)過Apache軟件基金會(huì)(ASF)的投票,Kylin正式畢業(yè),稱為其大數(shù)據(jù)領(lǐng)域的一個(gè)頂級(jí)項(xiàng)目。值得一提的是,2015年的9月,Kylin獲得 了美國(guó)InfoWorld評(píng)選的最佳開源大數(shù)據(jù)工具獎(jiǎng),同時(shí)獲獎(jiǎng)的還有Spark、Storm、Kafka等知名項(xiàng)目。
2016年3月, 由Apache Kylin主要開發(fā)人員組成的公司Kyligence成立,致力于Kylin在業(yè)界的推廣和使用。
前面講的是Kylin發(fā)展的歷史,接下來講一下Kylin核心技術(shù)。
做過BI分析的人,對(duì)Cube都會(huì)有概念,就是用空間換時(shí)間。通過預(yù)計(jì)算把用戶需要查詢的維度以及他們所對(duì)應(yīng)的考量的值,存儲(chǔ)在多維空間里。
當(dāng)用戶查詢某幾個(gè)維度的時(shí)候,通過這些維度條件去定位到預(yù)計(jì)算的向量空間,通過再聚合處理,快速返回最終結(jié)果給用戶。
所不同的是,Kylin的cube不是單一維度的組合,而是所有組合都可以計(jì)算。N個(gè)維度的完整Cube, 會(huì)有2的N次方種組合。
Kylin架構(gòu)是這樣的,首先要求用戶把數(shù)據(jù)放在Hadoop上,通過Hive管理,用戶在Kylin中進(jìn)行數(shù)據(jù)建模以后,Kylin會(huì)生成一系列的MapReduce任務(wù)來計(jì)算Cube,算好的Cube最后以K-V的方式存儲(chǔ)在HBase中。
分析工具發(fā)送標(biāo)準(zhǔn)SQL查詢,Kylin將它轉(zhuǎn)換成對(duì)HBase的Scan,快速查到結(jié)果返回給請(qǐng)求方。
Cube是怎么計(jì)算出來的?
這是在1.5之前版本中的的算法,也叫逐層算法。它會(huì)啟動(dòng)N+1輪MapReduce計(jì)算。
第一輪讀取原始數(shù)據(jù),去掉不相關(guān)的列,只保留相關(guān)的。同時(shí)對(duì)維度列進(jìn)行壓縮編碼;以此處的四維Cube為例,經(jīng)過第一輪計(jì)算出ABCD組合,我們也稱為Base Cuboid;
此后的每一輪MapReduce,輸入是上一輪的輸出,以重用之前計(jì)算的結(jié)果,去掉要聚合的維度,算出新的Cuboid。以此往上,直到最后算出所有的Cuboid。
Cube在Storage上是怎么存儲(chǔ)的?
星形模型會(huì)先被拉成一張平表, Dimension的值拼接在一起,后面接著是Metrics。為了標(biāo)示這是哪幾個(gè)維度的組合,會(huì)在行的開始加上Cuboid ID。最后,Cuboid ID + dimensions會(huì)被用作Rowkey,Metrics會(huì)作為Value放到Column中 。
查詢的時(shí)候,SQL語句被SQL解析器翻譯成一個(gè)解釋計(jì)劃,從這個(gè)計(jì)劃可以準(zhǔn)確知道用戶要查哪些表,它們是怎樣join起來,有哪些過濾條件等等。Kylin會(huì)用這個(gè)計(jì)劃去匹配尋找合適的Cube。
如果有Cube命中,這個(gè)計(jì)劃會(huì)發(fā)送到存儲(chǔ)引擎,翻譯成對(duì)存儲(chǔ)(默認(rèn)HBase)相應(yīng)的Scan操作。Groupby和過濾條件的列,用來找到Cuboid,過濾條件會(huì)被轉(zhuǎn)換成Scan的開始和結(jié)束值, 以縮小Scan的范圍; Scan的result,Rowkey會(huì)被反向解碼成各個(gè)dimension的值,Value會(huì)被解碼成Metrics值 。
接下來介紹Kylin的企業(yè)級(jí)特性;Kylin的特性比較多,這里就不一一列舉,主要 講一下對(duì)企業(yè)比較友好的特性。
首先,毋庸置疑, Kylin對(duì)外暴露的是標(biāo)準(zhǔn)的SQL,支持大多數(shù)的SELECT語法,可以把各種工具和系統(tǒng)直接對(duì)接進(jìn)來。這意味著當(dāng)您使用Kylin的時(shí)候,不需要對(duì)業(yè)務(wù)系統(tǒng)做額外的改動(dòng)。
第二,Kylin提供了各種接入方式, 如ODBC、JDBC; 如果您的系統(tǒng)不使用這兩種方式,還可以使用RESTful API查詢。
Kylin架構(gòu)天生就非常適合Scale out,當(dāng)查詢量上升,單節(jié)點(diǎn)不能滿足的時(shí)候,只需要相應(yīng)增加Kylin的節(jié)點(diǎn)就可以滿足。
針對(duì)企業(yè)對(duì)安全的要求,我們有不同力度做安全控制。Kylin有不同用戶角色做不同的事情,此外在project和cube層級(jí)可以定義ACL幫助在更細(xì)力度掌控對(duì)cube的使用。
企業(yè)通常會(huì)使用目錄服務(wù)來管理用戶和群組,Kylin支持LDAP認(rèn)證登錄;如果對(duì)安全有更高的要求,Kylin還支持了基于SAML的單點(diǎn)登錄(SingleSign-On),只要做一些配置就可以完成,不需要額外開發(fā)。
Kylin提供了豐富的RESTful API,非常方便從用各種已有系統(tǒng),如任務(wù)調(diào)度,監(jiān)控等接入Kylin。Kylin的Web UI做到的事情通過API都可以做到。我們看到網(wǎng)易、美團(tuán)等在Kylin之上開做了封裝,跟他們各自的BI做深度的融合,就是利用了這個(gè)特性。
怎么樣用Kylin來構(gòu)建大數(shù)據(jù)的分析平臺(tái)?
很簡(jiǎn)單。Kylin部署和安裝是非常方便的,我們稱為非侵入式的安裝。如果你已經(jīng)有一套Hadoop,安裝Kylin,只要增加一臺(tái)機(jī)器,下載Kylin安裝包運(yùn)行就可以了,Kylin使用標(biāo)準(zhǔn)Hadoop API跟各種組件通信,不需要對(duì)現(xiàn)有的Hadoop安裝額外的agent。
架構(gòu)上就是個(gè)分層的結(jié)構(gòu),最底層是數(shù)據(jù),放置在HDFS,其上是Hadoop層,需要有HBase、 Hive, MapReduce等。Kylin運(yùn)行中Hadoop之上,安裝好了之后,業(yè)務(wù)系統(tǒng)連入Kylin,Kylin把壓力分布到Hadoop上做計(jì)算和查詢。
有四種典型的部署架構(gòu),分別從簡(jiǎn)單到復(fù)雜。
第一種, Single instance的部署 ,通常一兩天就可以完成。首先要有Hadoop,版本在2.4或以上。加一臺(tái)Hadoop客戶機(jī),下載Kylin,即可一鍵啟動(dòng)。 建模人員通過Kylin Web登錄,進(jìn)行建模和cube的創(chuàng)建。業(yè)務(wù)分析系統(tǒng)或者工具發(fā)SQL到Kylin,Kylin查詢Cube返回結(jié)果。
這種部署最大特點(diǎn)是簡(jiǎn)單;缺點(diǎn)也很明顯: Kylin是單點(diǎn),并發(fā)請(qǐng)求上來的時(shí)候它會(huì)成為瓶頸,所以需要Cluster的部署。
Kylin部署到Cluster非常簡(jiǎn)單,只需要增加Kylin的節(jié)點(diǎn)數(shù),因?yàn)镵ylin的metadata也是存儲(chǔ)在HBase,只需要讓它們用同一張metadata表就可以組成cluster 。通常在這個(gè)時(shí)候會(huì)用LDAP來管理用戶權(quán)限。
為了將負(fù)載分布到Kylin cluster, 需要建立一個(gè)Load Balancer(負(fù)載均衡器). 在LB這里可以啟用SSL加密,申請(qǐng)域名,還可以安裝防火墻,對(duì)外只暴露LB的地址和端口,確保Hadoop和Kylin在網(wǎng)絡(luò)上對(duì)外是隔離的。
業(yè)務(wù)系統(tǒng)和用戶通過LB的地址訪問Kylin。這樣的部署,Kylin將不是單點(diǎn),一個(gè)節(jié)點(diǎn)失效,不會(huì)影響業(yè)務(wù)分析。是不是這樣就完美了呢?也不是。
Kylin非常適合于做讀寫分離,原因是Kylin的工作負(fù)載有兩種:
前者是Cube的計(jì)算,它是批量的、延時(shí)很長(zhǎng)的計(jì)算,有密集的CPU和IO;
后者是在線的計(jì)算,是只讀的,因?yàn)槊嫦蛴脩?#xff0c;它要求低延遲。Cube計(jì)算的過程會(huì)對(duì)集群帶來很大的負(fù)載,從而產(chǎn)生噪音;所以我們有充足的理由進(jìn)行讀寫分析。
Kylin很容易做到這一點(diǎn),你可以把HBase單獨(dú)部署成一個(gè)集群,在部署Kylin的節(jié)點(diǎn)上,hadoop 配置指向運(yùn)算的集群,Hbase的配置指向HBase集群。通過這樣的部署,可以確保Hbase的查詢可以在很短時(shí)間完成,而計(jì)算集群可以跟公司其它部門分享。
現(xiàn)在目前Kylin使用中估計(jì)99%的情況是前面三種部署。還有一種更高級(jí)的部署是Staging和Prod多環(huán)境的部署。
在一個(gè)大的企業(yè)里,往往需要多套環(huán)境,用于測(cè)試,生產(chǎn)等不同目的。
舉例來說,新用戶上到Kylin來的時(shí)候,最初他對(duì)cube不是很了解,可能創(chuàng)建了一個(gè)設(shè)計(jì)不是很好的cube,導(dǎo)致產(chǎn)生大量的不必要的運(yùn)算,或者查詢花了很長(zhǎng)時(shí)間。我們不希望這樣的情況發(fā)生在生產(chǎn)環(huán)境,對(duì)其它業(yè)務(wù)造成影響,所以會(huì)建立一個(gè)staging,或者稱為QA的環(huán)境。
新用戶必須先走staging環(huán)境創(chuàng)建和調(diào)優(yōu)cube,直到cube性能達(dá)到要求,數(shù)據(jù)膨脹率也在一個(gè)可控范圍內(nèi),這時(shí)候由用戶提出請(qǐng)求,由Kylin專家來做一個(gè)審核,審核通過后,再允許這個(gè)cube被遷移到生產(chǎn)環(huán)境。
這里Kylin提供了一個(gè)工具, 幾分鐘就可以講一個(gè)Cube從一個(gè)環(huán)境遷移到另一個(gè)環(huán)境,不需要在新環(huán)境中重新build。 在生產(chǎn)環(huán)境的Cube,將不允許修改, 只能做增量的build 。
這樣做Staging和Prod分離,Prod中的cube都是經(jīng)過專家的審核的,所以將是非常穩(wěn)定的,里面的每個(gè)cube都是有據(jù)可循的。
這就是關(guān)于Kylin的部署的分享。
到今天Kylin已經(jīng)有了很多的使用案例,這里簡(jiǎn)單列一些已知的。最早是在eBay,國(guó)內(nèi)有京東、運(yùn)營(yíng)、美團(tuán)、中國(guó)移動(dòng)(包括廣東移動(dòng)和北京移動(dòng)),還有微軟 。
以上是今天的分享,謝謝大家。
總結(jié)
以上是生活随笔為你收集整理的【转】使用Apache Kylin搭建企业级开源大数据分析平台的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java中的<>@造型专家_day_16
- 下一篇: 俄罗斯游戏软件:C语言应用初步感受