[Kyligence]史少鋒:使用Apache Kylin搭建企業級開源大數據分析平臺

//
【PPT+實錄】Kyligence史少鋒:使用Apache Kylin搭建企業級開源大數據分析平臺
http://mp.weixin.qq.com/s?src=3&timestamp=1486430922&ver=1&signature=YfS7PgVR0SjjLt4KwIQ297t4SDiLrrJu5C7uuMXpkCsyWJATNcTsLzO1j4nmqoYqW0LnQD6VoQOTFo4Hu0y7zPM-pPVeFJnRh12GJUFT2SxzHtlV-DNTB62iGOoHuh6WoSRBNmYFjgelfl18SgWFfHF8Ylboe30xgn6Ll9*m0=

本篇文章整理自史少鋒4月23日在『1024大數據技術峰會』上的分享實錄:使用Apache Kylin搭建企業級開源大數據分析平臺。

正文如下

我先做一個簡單介紹我叫史少鋒,我曾經在IBM、eBay做過大數據、云架構的開發,現在是Kyligence的技術合伙人。

Kylin是這兩年在國內發展非常快的開源大數據項目。今天大會合作廠商中有超過一半的企業已經在使用或者正在試用Kylin,應主辦方邀請,今天跟大家做一個關于如何使用Kylin構建開源大數據分析平臺的分享。


這是我今天的議程,分兩部分。

前半部分:
針對Kylin的初級和入門用戶介紹Kylin項目的由來以及技術核心。

后半部分:
介紹如何基于Kylin構建開源大數據分析平臺,把Hadoop數據平臺和業務分析系統連接起來。


Kylin(麒麟)是什么?我們聽到過有麒麟芯片、麒麟OS等等,我們這個全名是叫Apache Kylin,是一個大數據分析的項目。

從名字上或許可以猜到,它來自中國,的確這也是我們想讓世界知道的,有一群來自中國的工程師在向Hadoop貢獻著這樣一個獨特的項目。

Apache Kylin 是在Hadoop之上的分布式的大數據分析引擎,它對外暴露的是標準SQL接口,支持TB到PB量級的數據,以秒級甚至亞秒級的時間返回響應。


任何一個項目的誕生都有一定的背景和原因。

今天我們看到越來越多的企業正在使用Hadoop,正在把Hadoop作為他們的基礎平臺來管理和分析數據。

但是,企業在使用Hadoop的時候,往往發現有一個很大的Gap:

一方面,現有的分析系統或分析工具,不能很好支持Hadoop; Hadoop上的數據的體量是遠遠超過傳統單機或者傳統關系型數據庫的體量,原有的系統接入Hadoop根本無法承受這么大的數據量。

此外這些遺留系統當初設計的時候就不是一個分布式的架構,沒辦法水平地擴容。

另一方面,對于數據使用者或者分析師,讓他們直接使用Hadoop,寫MapReduce或者Spark的任務,是難以接受的。此外,Hadoop主要是用于做批量運算, 通常需要幾十分鐘,最快也要幾分鐘,對于分析人員來說很難有一個好的使用體驗;等幾分鐘才能看到結果數據,大大影響了他們的工作效率。

這個問題當年就是在eBay內部就被提出來,為此專門成立了一個項目。


2013年的時候,Kylin項目的創始人韓卿(Luke),授命帶著工程師研究這個難題,經過不斷的嘗試和摸索,Kylin探索出了在Hadoop之上做預計算、做Cube這條路線,這是之前沒有人嘗試過的。

最終這個項目在2014年10月在Github開源 。一個月之后項目被Apache接受成為其一個孵化器項目。

2015年11月份,經過Apache軟件基金會(ASF)的投票,Kylin正式畢業,稱為其大數據領域的一個頂級項目。值得一提的是,2015年的9月,Kylin獲得 了美國InfoWorld評選的最佳開源大數據工具獎,同時獲獎的還有Spark、Storm、Kafka等知名項目。

2016年3月, 由Apache Kylin主要開發人員組成的公司Kyligence成立,致力于Kylin在業界的推廣和使用。


前面講的是Kylin發展的歷史,接下來講一下Kylin核心技術。


做過BI分析的人,對Cube都會有概念,就是用空間換時間。通過預計算把用戶需要查詢的維度以及他們所對應的考量的值,存儲在多維空間里。

當用戶查詢某幾個維度的時候,通過這些維度條件去定位到預計算的向量空間,通過再聚合處理,快速返回最終結果給用戶。

所不同的是,Kylin的cube不是單一維度的組合,而是所有組合都可以計算。N個維度的完整Cube, 會有2的N次方種組合。


Kylin架構是這樣的,首先要求用戶把數據放在Hadoop上,通過Hive管理,用戶在Kylin中進行數據建模以后,Kylin會生成一系列的MapReduce任務來計算Cube,算好的Cube最后以K-V的方式存儲在HBase中。

分析工具發送標準SQL查詢,Kylin將它轉換成對HBase的Scan,快速查到結果返回給請求方。


Cube是怎么計算出來的?

這是在1.5之前版本中的的算法,也叫逐層算法。它會啟動N+1輪MapReduce計算。

第一輪讀取原始數據,去掉不相關的列,只保留相關的。同時對維度列進行壓縮編碼;以此處的四維Cube為例,經過第一輪計算出ABCD組合,我們也稱為Base Cuboid;

此后的每一輪MapReduce,輸入是上一輪的輸出,以重用之前計算的結果,去掉要聚合的維度,算出新的Cuboid。以此往上,直到最后算出所有的Cuboid。

Cube在Storage上是怎么存儲的?


星形模型會先被拉成一張平表, Dimension的值拼接在一起,后面接著是Metrics。為了標示這是哪幾個維度的組合,會在行的開始加上Cuboid ID。最后,Cuboid ID + dimensions會被用作Rowkey,Metrics會作為Value放到Column中 。

查詢的時候,SQL語句被SQL解析器翻譯成一個解釋計劃,從這個計劃可以準確知道用戶要查哪些表,它們是怎樣join起來,有哪些過濾條件等等。Kylin會用這個計劃去匹配尋找合適的Cube。
如果有Cube命中,這個計劃會發送到存儲引擎,翻譯成對存儲(默認HBase)相應的Scan操作。Groupby和過濾條件的列,用來找到Cuboid,過濾條件會被轉換成Scan的開始和結束值, 以縮小Scan的范圍; Scan的result,Rowkey會被反向解碼成各個dimension的值,Value會被解碼成Metrics值

Cube在Storage上是怎么存儲的?


星形模型會先被拉成一張平表, Dimension的值拼接在一起,后面接著是Metrics。為了標示這是哪幾個維度的組合,會在行的開始加上Cuboid ID。最后,Cuboid ID + dimensions會被用作Rowkey,Metrics會作為Value放到Column中 。


查詢的時候,SQL語句被SQL解析器翻譯成一個解釋計劃,從這個計劃可以準確知道用戶要查哪些表,它們是怎樣join起來,有哪些過濾條件等等。Kylin會用這個計劃去匹配尋找合適的Cube。

如果有Cube命中,這個計劃會發送到存儲引擎,翻譯成對存儲(默認HBase)相應的Scan操作。Groupby和過濾條件的列,用來找到Cuboid,過濾條件會被轉換成Scan的開始和結束值, 以縮小Scan的范圍; Scan的result,Rowkey會被反向解碼成各個dimension的值,Value會被解碼成Metrics值 。

接下來介紹Kylin的企業級特性;Kylin的特性比較多,這里就不一一列舉,主要講一下對企業比較友好的特性。


首先,毋庸置疑, Kylin對外暴露的是標準的SQL,支持大多數的SELECT語法,可以把各種工具和系統直接對接進來。這意味著當您使用Kylin的時候,不需要對業務系統做額外的改動。

第二,Kylin提供了各種接入方式, 如ODBC、JDBC; 如果您的系統不使用這兩種方式,還可以使用RESTful API查詢。

Kylin架構天生就非常適合Scale out,當查詢量上升,單節點不能滿足的時候,只需要相應增加Kylin的節點就可以滿足。

針對企業對安全的要求,我們有不同力度做安全控制。Kylin有不同用戶角色做不同的事情,此外在project和cube層級可以定義ACL幫助在更細力度掌控對cube的使用。

企業通常會使用目錄服務來管理用戶和群組,Kylin支持LDAP認證登錄;如果對安全有更高的要求,Kylin還支持了基于SAML的單點登錄(SingleSign-On),只要做一些配置就可以完成,不需要額外開發。

Kylin提供了豐富的RESTful API,非常方便從用各種已有系統,如任務調度,監控等接入Kylin。Kylin的Web UI做到的事情通過API都可以做到。我們看到網易、美團等在Kylin之上開做了封裝,跟他們各自的BI做深度的融合,就是利用了這個特性。

怎么樣用Kylin來構建大數據的分析平臺?

很簡單。Kylin部署和安裝是非常方便的,我們稱為非侵入式的安裝。如果你已經有一套Hadoop,安裝Kylin,只要增加一臺機器,下載Kylin安裝包運行就可以了,Kylin使用標準Hadoop API跟各種組件通信,不需要對現有的Hadoop安裝額外的agent。

架構上就是個分層的結構,最底層是數據,放置在HDFS,其上是Hadoop層,需要有HBase、 Hive, MapReduce等。Kylin運行中Hadoop之上,安裝好了之后,業務系統連入Kylin,Kylin把壓力分布到Hadoop上做計算和查詢。

有四種典型的部署架構,分別從簡單到復雜。

第一種,Single instance的部署,通常一兩天就可以完成。首先要有Hadoop,版本在2.4或以上。加一臺Hadoop客戶機,下載Kylin,即可一鍵啟動。 建模人員通過Kylin Web登錄,進行建模和cube的創建。業務分析系統或者工具發SQL到Kylin,Kylin查詢Cube返回結果。

這種部署最大特點是簡單;缺點也很明顯: Kylin是單點,并發請求上來的時候它會成為瓶頸,所以需要Cluster的部署。

Kylin部署到Cluster非常簡單,只需要增加Kylin的節點數,因為Kylin的metadata也是存儲在HBase,只需要讓它們用同一張metadata表就可以組成cluster 。通常在這個時候會用LDAP來管理用戶權限。

為了將負載分布到Kylin cluster, 需要建立一個Load Balancer(負載均衡器). 在LB這里可以啟用SSL加密,申請域名,還可以安裝防火墻,對外只暴露LB的地址和端口,確保Hadoop和Kylin在網絡上對外是隔離的。

業務系統和用戶通過LB的地址訪問Kylin。這樣的部署,Kylin將不是單點,一個節點失效,不會影響業務分析。是不是這樣就完美了呢?也不是。

Kylin非常適合于做讀寫分離,原因是Kylin的工作負載有兩種:

前者是Cube的計算,它是批量的、延時很長的計算,有密集的CPU和IO;

后者是在線的計算,是只讀的,因為面向用戶,它要求低延遲。Cube計算的過程會對集群帶來很大的負載,從而產生噪音;所以我們有充足的理由進行讀寫分析。

Kylin很容易做到這一點,你可以把HBase單獨部署成一個集群,在部署Kylin的節點上,hadoop 配置指向運算的集群,Hbase的配置指向HBase集群。通過這樣的部署,可以確保Hbase的查詢可以在很短時間完成,而計算集群可以跟公司其它部門分享。

現在目前Kylin使用中估計99%的情況是前面三種部署。還有一種更高級的部署是Staging和Prod多環境的部署。


在一個大的企業里,往往需要多套環境,用于測試,生產等不同目的。

舉例來說,新用戶上到Kylin來的時候,最初他對cube不是很了解,可能創建了一個設計不是很好的cube,導致產生大量的不必要的運算,或者查詢花了很長時間。我們不希望這樣的情況發生在生產環境,對其它業務造成影響,所以會建立一個staging,或者稱為QA的環境。

新用戶必須先走staging環境創建和調優cube,直到cube性能達到要求,數據膨脹率也在一個可控范圍內,這時候由用戶提出請求,由Kylin專家來做一個審核,審核通過后,再允許這個cube被遷移到生產環境。

這里Kylin提供了一個工具, 幾分鐘就可以講一個Cube從一個環境遷移到另一個環境,不需要在新環境中重新build。 在生產環境的Cube,將不允許修改, 只能做增量的build 。

這樣做Staging和Prod分離,Prod中的cube都是經過專家的審核的,所以將是非常穩定的,里面的每個cube都是有據可循的。

這就是關于Kylin的部署的分享。

到今天Kylin已經有了很多的使用案例,這里簡單列一些已知的。最早是在eBay,國內有京東、運營、美團、中國移動(包括廣東移動和北京移動),還有微軟 。

以上是今天的分享,謝謝大家。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,362評論 6 537
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,013評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,346評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,421評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,146評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,534評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,585評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,767評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,318評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,074評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,258評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,828評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,486評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,916評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,156評論 1 290
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,993評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,234評論 2 375

推薦閱讀更多精彩內容