頂級項目孵化的故事系列——Kylin的心路歷程


本文目錄

現(xiàn)在已經(jīng)是名滿天下的 Apache? Kylin,是 Hadoop 大數(shù)據(jù)生態(tài)系統(tǒng)不可或缺的一部分,要知道 Kylin 在項目的早期,可是以華人為主的項目團隊,一路披荊斬棘,經(jīng)過幾年的奮斗,才在 Apache 基金會牢牢的鞏固了自己的位置。Kylin 是本土第一個進入到世界頂級基金會的項目,它的經(jīng)驗是值得大家學(xué)習(xí)的。

以下內(nèi)容根據(jù)演講者在 COSCon'17 的演講速記所整理。

演講實錄

今天主要介紹一下 Apache? Kylin 一路走過來的心路歷程。

時間倒退到2014年,那時候 Kylin 剛開源,我們選擇了將項目捐贈給?Apache 孵化器,后來經(jīng)過了大約一年的時間,Kylin?順利地從孵化器畢業(yè),晉升為 Apache 的頂級項目。

此次的分享大概分如下這么幾個部分:

第一是 Kylin 簡介。國內(nèi)叫?Kylin?的項目比較多,我們這個項目全名要加上 Apache,即 Apache Kylin。

第二,架構(gòu)與核心,和其它大數(shù)據(jù)項目有什么不同。

第三是重點,敘述一下?Kylin 的開源之路。

第四是一點感慨和總結(jié)。

我叫史少鋒,在2014年加入 Kylin 項目,是早期的貢獻者之一,從開始給 Kylin?寫代碼,到現(xiàn)在運營社區(qū),跟用戶、開發(fā)者一起完善和改進 Kylin;期間也做了很多版本的發(fā)布。此外,Kylin 的文檔也主要由我維護。

Kylin 項目誕生于 eBay,當(dāng)初開源出去講它是第一個由華人主導(dǎo)的項目,很多人還以為是 eBay 美國的華人工程師開發(fā)的,其實它是完完全全由 eBay 在上海的開發(fā)人員所開創(chuàng)、貢獻出來的項目。當(dāng)時國內(nèi)進入?Apache 基金會的項目幾乎還沒有,Kylin?是第一個;現(xiàn)在這兩年逐漸的多了起來,如 CarbonData,Eagle, Grffin, RocketMQ, WeeX?等。

Kylin 是在大數(shù)據(jù)生態(tài)中的一個項目,它解決的是在海量數(shù)據(jù)上進行快速查詢的難題。這個項目之所以誕生在 eBay,也是因為 eBay 擁有海量數(shù)據(jù),有迫切的交互分析的需求。

曾經(jīng) eBay 是?Teradata 最大用戶,Teradata?的設(shè)備非常昂貴,每年 eBay?需要付給?TD?非常大一筆費用。但是 eBay?也是一家技術(shù)公司,為什么不能來自己自研一些技術(shù),來取代或降低 TD 的使用呢?這是一件非常困難的事情,當(dāng)時內(nèi)部有很多爭論,最后由在上海的韓卿帶領(lǐng)的團隊,通過研究和摸索做了出來。因為在 Hadoop 的生態(tài)中,很多項目代號都是動物,于是就找了中國神話中的動物麒麟來命名,象征吉祥和力量。

現(xiàn)在國內(nèi)很多大的互聯(lián)網(wǎng)公司都在用?Kylin,而且這個趨勢正在往制造業(yè)、金融業(yè)等傳統(tǒng)行業(yè)滲透。例如手機廠商?OPPO、VIVO、小米都在使用 Kylin 分析大數(shù)據(jù)。

什么是 Kylin?Kylin 的定位是什么呢?這張圖非常清晰地顯示了它在大數(shù)據(jù)生態(tài)的結(jié)構(gòu)。它下面依賴的是 Hadoop?的分布式計算能力,對上提供的是標(biāo)準(zhǔn) SQL?接口。它集成了 Hadoop 主流的技術(shù),像 HDFS、Hive、HBase?等等。在 Hadoop 上做 SQL 查詢的引擎有很多,比如說 Hive 本身就可以查詢。Kylin 的?SQL?引擎跟它們有什么區(qū)別,為什么可以號稱最快呢?原因是Kylin 是唯一一個在 Hadoop?上做預(yù)計算的分析引擎,其它技術(shù)都不是做預(yù)計算,他們主要的核心技術(shù)是大規(guī)模并行計算(MPP)。我們認(rèn)為當(dāng)數(shù)據(jù)量大到一定程度的時候,MPP 無法提供高性能,所以我們借鑒了傳統(tǒng)的預(yù)計算的技術(shù)并把它移植到了 Hadoop 上,就有了 Kylin。這是 Kylin 與其它?SQL 引擎的本質(zhì)區(qū)別。

下面是 Kylin 的兩個特性。

超高性能;可以萬億數(shù)據(jù)上達(dá)到亞秒級的數(shù)據(jù),典型案例來自今日頭條,它的一個?Cube 里有3萬億條數(shù)據(jù),90%的查詢能夠在1秒以內(nèi)完成。

高并發(fā);我們知道,一般性能上去以后,并發(fā)也就可以提高。Kylin?的另一大優(yōu)勢就是高并發(fā)。不少互聯(lián)網(wǎng)公司把 Kylin 用在高并發(fā)的查詢上,比如京東用在對外的數(shù)據(jù)接口上。比如美團,每日有130萬次查詢,99%的查詢在1秒內(nèi)。當(dāng)然美團的技術(shù)能力是比較強的,我們團隊有三個來自美團的?committer,他們對 Kylin 技術(shù)進行了深入的研究,幫助做了很多優(yōu)化和改進。

下面是Kylin的架構(gòu)。

Kylin 的設(shè)計非常巧妙,它沒有做別人已經(jīng)做的東西,而且充分利用了一些成熟技術(shù),充分地發(fā)揮它們的優(yōu)勢。左邊是 Kylin 支持的數(shù)據(jù)源,主要支持的數(shù)據(jù)源有批數(shù)據(jù)源 hive 和流數(shù)據(jù)源 kafka。把海量的數(shù)據(jù)抽取出來,接下來預(yù)計算怎么做呢?Kylin?整合了?MR,?Spark;Spark 引擎是在 Kylin2.0 引進的。會并發(fā)對你的數(shù)據(jù),根據(jù)建立的模型做預(yù)先的計算處理、編碼等等。最后計算好的數(shù)據(jù),會轉(zhuǎn)換并存儲到 HBASE。HBASE 是 Hadoop 上的海量數(shù)據(jù)庫,是一個列式的,基于 KV 的 Storage 。它可以提供非常低延遲的查詢,我們把關(guān)系型數(shù)據(jù)最終轉(zhuǎn)成了 KV 的方式。但 Kylin 對外暴露的依然是 SQL 的接口,是關(guān)系型的模型。以前是怎么查 Hive 表,可以把這個 SQL 給到 Kylin,Kylin 會把這些 SQL 進行轉(zhuǎn)換,變成對 Cube 的查詢。從而最終基于先前的預(yù)計算的結(jié)果,再次的后計算。往往后計算就會非常快,在幾十毫秒或者幾百毫秒就完成結(jié)果,以上這些就是 Kylin 所做的事情。

Kylin 的安裝部署非常的簡單,它只有一個包,下載下來找一臺機器就可以運行 Hadoop 的資源,不需要裝到 Hadoop 上的每個節(jié)點。

Kylin 的核心就是 Cube 理論,大家如果學(xué)過數(shù)據(jù)倉庫的話,Cube 是其中非常核心的一塊。何為Cube就是存放多維聚合數(shù)據(jù)的集合。比如我們能想象到的一個三維的立方體,它有長寬高三個維度。通過長寬高三個值可以定位到一個小的數(shù)據(jù)格,在這個里面就可以存儲數(shù)據(jù)。如果把這個概念延伸出去,可以有十維、二十維的 Cube。在線分析領(lǐng)域會按一些緯度去分析特定的指標(biāo),我們可以根據(jù)維度建立多維的向量空間,當(dāng)查詢來的時候,根據(jù)查詢中所體現(xiàn)出的緯度和過濾條件去直接定位多維空間的數(shù)值,從而給到最終的結(jié)果。

比如這里是一個四維的 Cube,有時間緯度、商品緯度、地點緯度、供應(yīng)商緯度,總共組合下來有16種緯度組合。每一個組合中每個緯度有自己的值,所以最終會形成一個大的 Cube。Cube 可以帶來什么好處呢?它可以讓查詢比以前快很多倍,怎么快呢?這里看一個例子,它是一個典型的 SQL 查詢,會查詢多張表,按條件組裝和過濾,過濾完以后還要做聚合,計算出結(jié)果后可能還會有排序。這樣會形成一個從上到下的執(zhí)行計劃。當(dāng)數(shù)據(jù)量加倍后,這個表的 Join 和聚合的計算量也會加倍,所以我們說沒有預(yù)計算的查詢引擎,它的時間復(fù)雜度是 O(N)。

如果我們把它計算成 Cube,在計算 Cube 的時候會預(yù)先把表做?join 及聚合。聚合完轉(zhuǎn)換成 Cube,Cube 里面有很多 Cuboid 里面有很多的索引。最終查詢過來的時候,透明地轉(zhuǎn)換成右邊的執(zhí)行計劃,以Cube 為起點,再去根據(jù)你的條件做一些過濾,再做少量的排序。由于在 Cube 中數(shù)據(jù)已經(jīng)進行了聚合和索引以及壓縮,所以查詢響應(yīng)非??臁K呀?jīng)跟原始數(shù)據(jù)量的大小沒有關(guān)系了,只跟數(shù)據(jù)模型的復(fù)雜度有關(guān)。一般業(yè)務(wù)的復(fù)雜度是基本穩(wěn)定的,所以我們說用了 Kylin?后,查詢時間復(fù)雜度可以降到 O(1)。

這里是網(wǎng)易提供的性能數(shù)據(jù),比如網(wǎng)易云音樂經(jīng)常要去找現(xiàn)在最流行的歌手和歌曲,這個查詢量很大。之前用?Oracle 查詢,延遲很高。用了?Kylin 預(yù)計算后,性能提升百倍、千倍甚至更多。Kylin 的架構(gòu)適合做水平擴展,當(dāng)需要的并發(fā)量更高,單個?Kylin?的節(jié)點不能滿足的時候,只要相應(yīng)的增加節(jié)點數(shù)就可以使得吞吐率得到線性的增長。

下面介紹一下Apache Kylin 的開源之路

Kylin 誕生于 eBay,因為 eBay 是一個全球性的公司,有世界級的市場,有非常多的交易數(shù)據(jù)、用戶數(shù)據(jù)。eBay 分析師團隊非常龐大,這些數(shù)據(jù)分析非常依賴于數(shù)據(jù)倉庫,這些數(shù)據(jù)倉庫是非常昂貴的。今天有越來越多的數(shù)據(jù)在 Hadoop 被加工、采集、轉(zhuǎn)換,以前這些數(shù)據(jù)加工完以后,要到?TD?中才能做分析,首先這個架構(gòu)就是割裂的架構(gòu),非常容易出錯。我們想為什么不能在 Hadoop 直接做,當(dāng)時也是做了各種各樣的調(diào)研,做了很多的調(diào)研,試用了很多項目,但是不能解決 eBay 所遇到的問題。所以最后決定自己做。

當(dāng)時 eBay 在上海有非常不錯的工程師團隊和工程師文化,所以韓卿就物色可以做這種事的人,然后找到了蔣旭,蔣旭對數(shù)據(jù)分析、搜索引擎比較了解,再加上在 eBay 做了 Hadoop 相關(guān)的開發(fā),所以對 Hadoop 很懂,所以拿來書就開始研究。他想出一條路,在 Hadoop 上做預(yù)計算,然后由招兵買馬找人做這個項目。這個項目從2013年開始做,加班加點差不多一年時間,在2014年的10月1號終于在 eBay 內(nèi)部上了生產(chǎn)。上了生產(chǎn)的同一天就把代碼放在 Github 上進行開源,為什么要開源?eBay 的主營業(yè)務(wù)是電商,技術(shù)并不是它的主要業(yè)務(wù)。另外 eBay 也是硅谷技術(shù)公司,本身用了很多開源技術(shù),有開源的傳統(tǒng)。在 Github 上開源出去以后,很快收獲了很多個贊,有一些大佬看這個項目給予了非常高的評價。另外一個主要原因,Kylin?確實做了一件別人沒有做的事情。隨后有人提議,項目要不要進到 Apache?進 Apache 是最好不過了,因為大數(shù)據(jù)的項目基本上都在 Apache,進 Apache 相當(dāng)于回歸到它應(yīng)該在的地方,而且這個社區(qū)知名度高,品牌度也高。所以2014年11月?Kylin?進入了 Apache 的孵化器,進入孵化器并不意味著就成功了,而是一個按照 Apache 要求進行孵化的過程,各項都要按照 Apache?要求來做,代碼要遷移到 Apache 的倉庫,committer?要簽 Apache 的協(xié)議,使用的第三方類庫許可證要做清理,不滿足 Apache 的要求的許可證的依賴都要去除、剝離。

大概過了好幾個月,在2015年的3月份,我們才做了第一個?Apache?Release。第一個版本出來并不是容易安裝,跟 Hadoop 的環(huán)境有關(guān)。所以在2015年的時候我們主要是解決用戶各種各樣的問題,來完善項目。期間很有意思的是美國有一個科技媒體 InfoWorld,每年它都會評選最佳開源軟件。那年?Kylin?剛開源不到一年,它就把最佳開源大數(shù)據(jù)的獎項給了?Kylin。但是幾個月以后才發(fā)現(xiàn)在 twitter 上被人@并恭喜,原因是我們都上不了 twitter。這個獎是獨立評選的,我們甚至都沒有得到通知,這給了我們一個很大的鼓舞,原來這個工具在國外也得到了這么高的評價。

在2015年底的時候,Luke(韓卿)?和 Apache?的主席建立了私人關(guān)系,讓他們也知道了我們的項目。麒麟在2015年就被很多大廠商用于生產(chǎn)環(huán)境,包括百度、京東;這很重要,說明了項目的成熟度,它經(jīng)受住了實戰(zhàn)的考驗。后來我們發(fā)起關(guān)于從孵化器畢業(yè)的討論,這個討論我們還以為會比較順利,因為?Kylin?的社區(qū)活躍度比較高,代碼的質(zhì)量也毋庸置疑。但是有意思的是,因為這是第一個來自中國的項目,當(dāng)時在投票的時候有人提出了質(zhì)疑,甚至修改主題為討論來自中國的開源項目。當(dāng)時我看到這封郵件的時候,心里有一些氣憤。他們說這些中國工程師他們總是喜歡在 QQ 群里面聊,他們不喜歡在郵件里討論,這是不符合 Apache 的精神的,而且經(jīng)常用中文討論他們看不懂云云。這個郵件出來的時候,我其實是蠻生氣的。Luke 說不要激動,隨后?Luke 給了他們一個有力的回復(fù),用數(shù)字證明了 Kylin 社區(qū)的活躍度。隨后 Apache 一個資深的人出來說,要停止這樣無意義的、有偏見性的討論。當(dāng)時的確有一些技術(shù)的 QQ 群,我也被人拉進去,后來我解釋了,確實 Apache 不建議通過 QQ 群去討論,有問題還是去社區(qū)發(fā)郵件。因為 QQ 群問了問題,我給你回答,下一個用戶看不到這個問題,搜索引擎也沒有辦法檢索到,這些知識沒法被沉淀。之后我退了群,有問題在社區(qū)提問,下次有人問類似問題的時候不需要再回答,只需要給一個鏈接。

后來到投票畢業(yè)的時候,開始的投票都是+1贊成,突然有個?reviewer?給了個-1,因為他仔細(xì)掃描了我們的代碼,發(fā)現(xiàn)前端頁面有打包一個谷歌的字體文件,這個字體的?license?來源不明,不適合打包在?Apache?軟件。當(dāng)時我們緊急撤換字體,換到其它可用的字體,再補發(fā)一個新的版本,這位?reviewer 隨后說我改變我的投票為+1。至此我們項目以全票通過的方式順利從孵化器畢業(yè)了。

畢業(yè)成為頂級項目在我們看來還只是一個起點,它代表我們的項目得到了大家的認(rèn)可,但前面還有更長的路要走。在2016年初的時候,當(dāng)時的團隊幾名成員出來成立了一家公司,專門致力于 Kylin 的發(fā)展。這里有一個爭論,你們是不是獲得了知識產(chǎn)權(quán)呢?其實這個項目是捐獻給了Apache?基金會,它不屬于任何一家公司,它的知識產(chǎn)權(quán)是屬于社區(qū),屬于大家的,每個人都可以致力于這樣的開源項目做二次開發(fā)。我們成立公司以后,在2016年發(fā)布了?Kylin 的商業(yè)版KAP,因為一些行業(yè)和客戶對產(chǎn)品有更高的需求,現(xiàn)在我們開源版和企業(yè)版一起在推動。2016年的時候?Kylin?又蟬聯(lián)了最佳大數(shù)據(jù)工具的獎項,而且2016獲獎的名單比2015年減少了一半,從22個變成了11個,足以說明了用戶對 Kylin 的認(rèn)可。

在今年 Kylin?版本已經(jīng)最新發(fā)布到 2.2。接下來簡要介紹一下 Kylin 版本的一些主要變化吧。第一個版本2014天10月的時候是比較簡陋粗糙,很多用戶在安裝的時候遇到問題。1.0?版本的時候兼容性已經(jīng)大大提高,大家拿去解壓基本上就可以運行了,不像之前 0.7 的版本還要做很多手工配置。后來到?1.5 版本,對底層的存儲引擎做了大幅改進,改成了分片的存儲,使得它的性能提升若干倍。隨后的 1.6?版本加入了對流式數(shù)據(jù)的支持,使得數(shù)據(jù)從產(chǎn)生到被查詢到的時間大幅縮減。今年初更大的一個版本 2.0?發(fā)布,最大的變化是支持雪花模型,還有是對?Spark 的支持,使得構(gòu)建的時間可以減少三分之一到二分之一。2.2?版本又支持了查詢下壓到其他引擎的功能。

如今?Kylin 的用戶數(shù)非常多,不止二三百個,互聯(lián)網(wǎng)企業(yè)很多都在用 Kylin,包括國外也有多的用戶在使用?,F(xiàn)在我經(jīng)常接到一些幫助請求,來自英國、意大利、法國、以色列等等。我們在金融、電信領(lǐng)域,有非常大的發(fā)展空間。例如太保、銀聯(lián)、華泰證券,陸金所,還有三大電信公司,都跟我們有合作。中國前三大手機廠商,包括華為,都是 Kyin 的用戶。

Kylin 今天取得的成功是我們最初沒有看到的。當(dāng)初做這個項目的一些伙伴,有一些陸續(xù)離開了團隊。從始至終麒麟的核心人員也就四五個,Kylin?的貢獻者遠(yuǎn)少于其他的開源項目,但是社區(qū)的郵件非?;钴S,我們第三季度有超過1000個郵件討論,當(dāng)然線下還很多的 QQ 群、微信群在討論,那個就不統(tǒng)計了。我每天固定抽出一定時間,會到郵件社區(qū)幫助用戶解決這些問題,大家都是義務(wù)在為開源項目工作。

最后總經(jīng)一下。如何成為一個成功的開源項目。

?產(chǎn)品要好用。易用性非常重要,Kylin?不僅性能好,而且還提供了豐富易用的接口和用戶界面。

性能追求極致。不斷優(yōu)化查詢引擎、存儲引擎,追求更好的性能。

構(gòu)建生態(tài)。我們不是一家什么都做的公司,跟其他廠商一起合作發(fā)展有助于生態(tài)的構(gòu)建。

輕量級架構(gòu)。對管理員友好,架構(gòu)要非常容易地擴展部署,滿足企業(yè)不同的 IT 架構(gòu)。

傾聽社區(qū)用戶的反饋。這樣他們才會長期地跟隨你一起來發(fā)展。

我們非常歡迎大家貢獻到開源社區(qū),貢獻到 Apache。為 Apache 頂級開源項目貢獻代碼并不難,第一步先加入社區(qū)討論,知道大家做什么,知道大家有哪些難點。其次在學(xué)習(xí)之后貢獻你的?patch,有了第一個 patch 后,希望你持續(xù)地貢獻,貢獻到10個20個,或者更多的時候我們就可以來投票,將你發(fā)展成 committer。Apache Committer?對于個人是一個很好的認(rèn)可,你的品牌、代碼全世界的人都可以看到。

最后和大家簡單提一下我們公司 -- Kyligence,基于 Apache Kylin 之上提供商業(yè)服務(wù)的大數(shù)據(jù)創(chuàng)業(yè)公司。公司位于上海張江,已經(jīng)在硅谷設(shè)立分公司,以后會有更多。我們這家公司跟交大有非常深的淵源,我們的主力都是交大的校友。Kylin?頭六號的貢獻者中五位是交大畢業(yè),所以我們也非常歡迎交大的師弟師妹加入我們公司,大家一起來做一個世界級的項目。?

謝謝大家!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容