美團(tuán)數(shù)據(jù)倉庫的演進(jìn)

作為IT從業(yè)者抬吟,今天看到這邊篇文章,自己的想法還是挺多的统抬,轉(zhuǎn)載過來保存一下火本,方便自己后期閱讀吧危队。

美團(tuán)數(shù)據(jù)倉庫,在過去的兩年中钙畔,與我們的業(yè)務(wù)一起高速發(fā)展茫陆。在這一演進(jìn)過程中,有很多值得總結(jié)和沉淀的內(nèi)容擎析。這篇文檔回顧下美團(tuán)數(shù)據(jù)倉庫這兩年發(fā)展過程中遇到的各種問題簿盅,為什么選擇了現(xiàn)在的技術(shù)方案,每一個(gè)功能和模塊是在什么情況下產(chǎn)生的揍魂,解決的是什么問題,中間有過哪些彎路现斋。既可以作為大家熟悉美團(tuán)數(shù)據(jù)倉庫構(gòu)建過程的一篇文檔喜最,也可以作為初次建立數(shù)據(jù)倉庫的參考。

史前時(shí)代

在正式建設(shè)美團(tuán)數(shù)據(jù)倉庫之前庄蹋,數(shù)據(jù)組也為各部門提供數(shù)據(jù)支持瞬内,不過那個(gè)時(shí)候的數(shù)據(jù)需求還比較少,而且也相對(duì)簡(jiǎn)單限书。

通常的做法是:

工程師寫一段PHP或者Shell腳本虫蝶,從命令行輸入?yún)?shù)。

自己連接數(shù)據(jù)庫倦西,通常是一個(gè)業(yè)務(wù)數(shù)據(jù)庫的從庫能真,將需要的原始數(shù)據(jù)提取出來。

在內(nèi)存中計(jì)算數(shù)據(jù)扰柠。

然后將結(jié)果寫入一個(gè)專門存放統(tǒng)計(jì)結(jié)果的DB舟陆。

再寫一個(gè)PHP頁面作為報(bào)表提供給需求方。

這是簡(jiǎn)單明了的流程耻矮,但是隨著需求的增加和精細(xì)化,有一些問題變得很棘手忆谓,并嚴(yán)重影響的開發(fā)效率:

有很多重復(fù)勞動(dòng)和代碼裆装,比如連接數(shù)據(jù)庫的代碼,每個(gè)人都要寫倡缠,各種寫法不同哨免,分布在很多地方,如果哪個(gè)DB的連接方法變更了昙沦,需要更改很多地方琢唾。

中間數(shù)據(jù)缺失,中間計(jì)算結(jié)果不能共享盾饮。比如每個(gè)Deal每天的銷量采桃,不同的人寫報(bào)表懒熙,每人都可能要重算一次。

很難管理和維護(hù)普办,程序語言五花八門工扎,同一指標(biāo)可以寫多種統(tǒng)計(jì)方法,各種語言各種執(zhí)行方式衔蹲,缺少文檔肢娘,其他人很難接手維護(hù)。

數(shù)據(jù)的清洗和轉(zhuǎn)換沒有統(tǒng)一方法舆驶,比如橱健,哪天是每月第一天或每周第幾天這種需求,靠手工調(diào)用各種時(shí)間函數(shù)來計(jì)算沙廉,非常容易出錯(cuò)拘荡。

不同數(shù)據(jù)源的數(shù)據(jù)很難綜合使用, 比如一個(gè)數(shù) 據(jù)需要使用主站的數(shù)據(jù)和合同系統(tǒng)的數(shù)據(jù)蓝仲, 要把這些數(shù)據(jù)組織在一起就很麻煩

為了解決這些問題俱病,在2011年Q2初,數(shù)據(jù)組開始搭建美團(tuán)的數(shù)據(jù)倉庫袱结。

引入ETL

數(shù)據(jù)倉庫的學(xué)術(shù)定義有很多版本和特點(diǎn)亮隙,其中有幾個(gè)詞能概括這一段工作的特點(diǎn),規(guī)范和集成垢夹。

首先需要建立一個(gè)DB用于保存從各個(gè)數(shù)據(jù)源提取出來的數(shù)據(jù)溢吻。

第一,解決不同數(shù)據(jù)源的數(shù)據(jù)聯(lián)合使用的問題果元。

第二促王,因?yàn)槭仟?dú)立的DB,可以進(jìn)行復(fù)雜的計(jì)算而不用考慮會(huì)影響線上個(gè)系統(tǒng)的DB而晒。

第三蝇狼,可以保留大量需要重復(fù)使用的中間數(shù)據(jù)。

第四倡怎,數(shù)據(jù)在首次進(jìn)入數(shù)據(jù)倉庫時(shí)迅耘,就可以進(jìn)行清洗整理,去掉無效數(shù)據(jù)和臟數(shù)據(jù)监署,添加常用字段比如 datekey颤专。

這一時(shí)間的一個(gè)重要工作是,引入了一個(gè)工具——ETL钠乏。ETL是Extract(抽绕茱酢),Transform(轉(zhuǎn)換)晓避,Load(載入)的首字母組合簇捍。顧名思義只壳,ETL工具的功能就是抽取數(shù)據(jù),經(jīng)過加工后垦写,再載入到新的位置吕世。

ETL的優(yōu)點(diǎn)是:

封裝了到各個(gè)數(shù)據(jù)庫的連接,使得工程師只需要關(guān)注數(shù)據(jù)的抽取和轉(zhuǎn)換邏輯梯投,而不必處理各種數(shù)據(jù)庫的連接細(xì)節(jié)命辖。

將數(shù)據(jù)抽取和轉(zhuǎn)換統(tǒng)一使用SQL來表示,形式化的統(tǒng)一使得理解處理過程變的簡(jiǎn)單分蓖,便于不同的人協(xié)作開發(fā)尔艇,同時(shí),用SQL表示邏輯將各種復(fù)雜的統(tǒng)計(jì)交給關(guān)系數(shù)據(jù)庫來處理么鹤,也降低了出錯(cuò)的可能性终娃。數(shù)據(jù)抽取的過程中同時(shí)完成各種清洗和轉(zhuǎn)換,替換空值蒸甜,規(guī)范時(shí)間表示等棠耕。

這一時(shí)間也同時(shí)確定了很多規(guī)范:

用數(shù)據(jù)表示邏輯,典型例子是柠新,不再使用各種時(shí)間函數(shù)來計(jì)算時(shí)間窍荧,而是建立一個(gè)日期表,把某一天的各種信息屬性全部算出來存在一張表里恨憎,需要的時(shí)候只要連表就可以得到蕊退。大大降低了時(shí)間邏輯出錯(cuò)的可能性并簡(jiǎn)化了開發(fā)。

將數(shù)據(jù)分為維度數(shù)據(jù)憔恳,事實(shí)數(shù)據(jù)瓤荔,衍生數(shù)據(jù),聚合數(shù)據(jù)等類型钥组, 以及第一版的命名規(guī)范输硝。 為后續(xù)數(shù)據(jù)的組織和管理奠定了基礎(chǔ)。

數(shù)據(jù)倉庫的基礎(chǔ)數(shù)據(jù)建設(shè)程梦,一直是數(shù)據(jù)組的一個(gè)主要工作腔丧,直到2011年Q4,隨著各種數(shù)據(jù)需求的增加作烟,在如何使用數(shù)據(jù)上,有了一些新想法砾医。

嘗試OLAP

要做數(shù)據(jù)倉庫拿撩,而不是數(shù)據(jù)墳?zāi)梗瑪?shù)據(jù)如果不被使用如蚜,就毫無用處压恒。怎么能供各部門更好的使用這些數(shù)據(jù)呢影暴?我們要做平臺(tái),可供人去探索數(shù)據(jù)的平臺(tái)探赫。

2011年下半年型宙,隨著美團(tuán)業(yè)務(wù)的高速發(fā)展,用數(shù)據(jù)支撐運(yùn)營變得越來越重要伦吠,各種數(shù)據(jù)需求出現(xiàn)了一個(gè)井噴期妆兑,開發(fā)人手比較少,一時(shí)間有些捉襟見肘毛仪。

有沒有方法能讓需求方自助的獲取數(shù)據(jù)搁嗓,而不依賴RD呢,想到了一個(gè)非常流行的概念是OLAP——聯(lián)機(jī)分析處理(相對(duì)于OLTP——聯(lián)機(jī)事務(wù)處理)箱靴,目標(biāo)是做成一個(gè)自助探索工具的平臺(tái)腺逛。

從2011年Q4開始到2012Q1,數(shù)據(jù)組開始調(diào)研試用開源的OLAP工具套件衡怀。耗時(shí)較長(zhǎng)棍矛,從調(diào)研和最后試用的情況看,現(xiàn)有的OLAP系統(tǒng)不適合我們抛杨。

有幾個(gè)主要的問題:

開發(fā)和使用太復(fù)雜够委,成本太高。

產(chǎn)品成熟度較低蝶桶,很多數(shù)據(jù)需求沒法支持慨绳。

笨重,不太適應(yīng)互聯(lián)網(wǎng)公司快速靈活的節(jié)奏真竖。

因?yàn)樯鲜鲈蚱暄?012Q1, 放棄了OLAP的嘗試恢共。

同時(shí)在這個(gè)時(shí)間點(diǎn)上战秋,公司對(duì)數(shù)據(jù)需求的增長(zhǎng),暴露出了數(shù)據(jù)倉庫的很多問題讨韭,可以說是需求走在了技術(shù)的前面脂信,迫使我們集中力量做很多大規(guī)模的升級(jí)。

數(shù)據(jù)倉庫是一套完整的環(huán)境

2012Q1時(shí)透硝,數(shù)據(jù)倉庫出現(xiàn)了很多新的棘手的問題狰闪。

首先,有哪些流程在線我們不清楚濒生,什么時(shí)間執(zhí)行的埋泵,有沒有按時(shí)執(zhí)行不清楚。報(bào)表出了問題要查流程歷史記錄都很難查。

其次丽声,我們已經(jīng)有了幾百個(gè)ETL流程礁蔗,流程之間有執(zhí)行順序的依賴關(guān)系,但是沒有好的工具來管理雁社,靠crontab里設(shè)定執(zhí)行時(shí)間間隔浴井。經(jīng)常出現(xiàn)上游還沒有算完,下游就啟動(dòng)了霉撵,會(huì)出現(xiàn)臟數(shù)據(jù)磺浙。另一方面,并行開發(fā)太多喊巍,一個(gè)人的修改屠缭,不知道會(huì)不會(huì)影響別人,經(jīng)常出現(xiàn)沖突崭参。

第三呵曹,每次都用PHP手寫報(bào)表,重復(fù)工作太多何暮,開發(fā)上線都非常復(fù)雜奄喂。

第四,數(shù)據(jù)表和指標(biāo)很多海洼,命名不規(guī)范跨新,經(jīng)常會(huì)遇到兩個(gè)相近概念的比較問題,解釋起來非常麻煩坏逢,需要遍歷整個(gè)計(jì)算過程才能梳理清楚域帐。

針對(duì)這些問題,分別開發(fā)了相應(yīng)的工具是整。

第一個(gè)是流程的注冊(cè)肖揣,管理,查看的工具浮入,每個(gè)流程都有了戶口本和行為記錄龙优。

第二,寫工具分析流程之間的依賴關(guān)系事秀,畫出關(guān)系圖彤断。

第三,開發(fā)調(diào)度系統(tǒng)易迹,根據(jù)關(guān)系圖調(diào)度ETL流程執(zhí)行宰衙。

第四,抽象報(bào)表工具睹欲,屏蔽復(fù)雜的報(bào)表頁面開發(fā)供炼,將報(bào)表抽象為SQL和配置。

第五,建立數(shù)據(jù)字典劲蜻,解釋每個(gè)指標(biāo)和名詞的意思和計(jì)算過程。

通過這幾項(xiàng)主要工作考余,美團(tuán)數(shù)據(jù)倉庫發(fā)展到了一個(gè)比較成熟的階段先嬉。也正是經(jīng)歷了這樣一個(gè)過程,我們深刻體會(huì)到楚堤,數(shù)據(jù)倉庫不僅僅是一個(gè)“數(shù)據(jù)存儲(chǔ)的工具”疫蔓, 數(shù)據(jù)倉庫應(yīng)該是一套完整的軟件環(huán)境,它應(yīng)該包括:數(shù)據(jù)抽取身冬,計(jì)算衅胀,存儲(chǔ),查詢酥筝,展示滚躯,以及管理這些過程的工具。

協(xié)作開放

美團(tuán)的數(shù)據(jù)需求發(fā)展非澈俑瑁快掸掏,這體現(xiàn)在數(shù)據(jù)規(guī)模的增長(zhǎng),數(shù)據(jù)分析人員的增長(zhǎng)宙帝,數(shù)據(jù)分析復(fù)雜程度的增長(zhǎng)丧凤。2012年下半年,快速發(fā)展的數(shù)據(jù)需求讓原有的數(shù)據(jù)倉庫架構(gòu)達(dá)到了瓶頸步脓。無論是DB的計(jì)算和存儲(chǔ)能力愿待,還是開發(fā)人員的精力,都達(dá)到了很高的負(fù)荷靴患。而且由于開發(fā)流程和提取數(shù)據(jù)的重復(fù)勞動(dòng)很多仍侥,團(tuán)隊(duì)士氣也比較低落。這一時(shí)間的迫切工作是蚁廓,如何能讓需求方自助獲取數(shù)據(jù)并分析访圃,如何能讓數(shù)據(jù)的計(jì)算和存儲(chǔ)方便的擴(kuò)展。

從2012年中開始相嵌,重點(diǎn)推進(jìn)了幾項(xiàng)工作以解決上述問題:

第一腿时,建設(shè)主題表,將各種數(shù)據(jù)按照常用的維度展開成寬達(dá)幾十列上百列的表饭宾,使得查數(shù)據(jù)非常的容易批糟。比如,將一個(gè)城市一天的幾百個(gè)指標(biāo)放在一行看铆,以城市id和日期作為主鍵徽鼎,不用任何連表,使用簡(jiǎn)單的語法就能獲取關(guān)于城市的各個(gè)角度的數(shù)據(jù)。類似的主題表還有用戶否淤,訂單悄但,Deal等角度。豐富的主題表不但簡(jiǎn)化了報(bào)表開發(fā)石抡, 也為非技術(shù)人員能夠自助查詢數(shù)據(jù)提供了方便檐嚣。

第二,開發(fā)自助查詢工具啰扛,培訓(xùn)使用嚎京,讓各個(gè)部門的人都能在數(shù)據(jù)倉庫上查自己需求的數(shù)據(jù),培訓(xùn)大家使用SQL隐解,自助完成需求鞍帝。

第三,建立數(shù)據(jù)集市煞茫,按業(yè)務(wù)拆分帕涌,將部分?jǐn)?shù)據(jù)導(dǎo)入到各個(gè)不同的DB,供業(yè)務(wù)部門更靈活的數(shù)據(jù)需求溜嗜。

第四宵膨,將數(shù)據(jù)的存儲(chǔ)和計(jì)算,向Hadoop/Hive 分布式平臺(tái)遷移炸宵,已達(dá)到線性擴(kuò)展計(jì)算和存儲(chǔ)能力的需求辟躏。

第五啄寡,開放數(shù)據(jù)的存儲(chǔ)和計(jì)算環(huán)境拦止,讓ETL流程的編寫和部署Web化,讓其它組有能力的RD叉庐,可以自己在數(shù)據(jù)倉庫上部署計(jì)算流程裹匙,計(jì)算自己需要的數(shù)據(jù)瑞凑。

這幾個(gè)工作的周期都比較長(zhǎng),現(xiàn)在也在進(jìn)行中概页,效果也十分明顯籽御,終于有和需求并肩走在一起,沒有落后的壓迫感了惰匙。但還沒有走在需求前面技掏。

還有很多挑戰(zhàn)

美團(tuán)的成長(zhǎng)速度非常快项鬼,數(shù)據(jù)的規(guī)模和復(fù)雜度還將十倍百倍的增長(zhǎng)哑梳;業(yè)務(wù)多樣且變化迅速。如何能夠在海量數(shù)據(jù)基礎(chǔ)上進(jìn)行數(shù)據(jù)的管理绘盟、加工鸠真、分析以支持快速成長(zhǎng)的業(yè)務(wù)悯仙,后續(xù)還面臨很多挑戰(zhàn)。

我們期待對(duì)數(shù)據(jù)敏感吠卷、對(duì)管理海量復(fù)雜數(shù)據(jù)锡垄、對(duì)建設(shè)大型互聯(lián)網(wǎng)電商數(shù)據(jù)倉庫有興趣的朋友們,加入美團(tuán)數(shù)據(jù)倉庫團(tuán)隊(duì)祭隔!歡迎投遞簡(jiǎn)歷到 diaoshihan(#)meituan.com

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末偎捎,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子序攘,更是在濱河造成了極大的恐慌,老刑警劉巖寻拂,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件程奠,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡祭钉,警方通過查閱死者的電腦和手機(jī)瞄沙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來慌核,“玉大人距境,你說我怎么就攤上這事】遄浚” “怎么了垫桂?”我有些...
    開封第一講書人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)粟按。 經(jīng)常有香客問我诬滩,道長(zhǎng),這世上最難降的妖魔是什么灭将? 我笑而不...
    開封第一講書人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任疼鸟,我火速辦了婚禮,結(jié)果婚禮上庙曙,老公的妹妹穿的比我還像新娘空镜。我一直安慰自己,他們只是感情好捌朴,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開白布吴攒。 她就那樣靜靜地躺著,像睡著了一般男旗。 火紅的嫁衣襯著肌膚如雪舶斧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,488評(píng)論 1 302
  • 那天察皇,我揣著相機(jī)與錄音茴厉,去河邊找鬼泽台。 笑死,一個(gè)胖子當(dāng)著我的面吹牛矾缓,可吹牛的內(nèi)容都是我干的怀酷。 我是一名探鬼主播,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼嗜闻,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼蜕依!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起琉雳,我...
    開封第一講書人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤样眠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后翠肘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體檐束,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年束倍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了被丧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡绪妹,死狀恐怖甥桂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情邮旷,我是刑警寧澤黄选,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站婶肩,受9級(jí)特大地震影響糕簿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜狡孔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一懂诗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧苗膝,春花似錦殃恒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至问窃,卻和暖如春亥鬓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背域庇。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來泰國打工嵌戈, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留覆积,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓熟呛,卻偏偏與公主長(zhǎng)得像宽档,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子庵朝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容