大數(shù)據(jù)的那些事(3):三駕馬車之坑人的MapReduce
在Google的三駕馬車?yán)锩?,Google File System是永垂不朽的,也是基本上沒有人去做什么進(jìn)一步的研究的。
BigTable是看不懂的,讀起來需要很多時(shí)間精力。
唯獨(dú)MapReduce,是霓虹燈前面閃爍的星星,撕逼戰(zhàn)斗的主角,眾人追捧和喊打的對(duì)象。自從MapReduce這個(gè)詞出來以后,不知道有多少篇論文發(fā)表出來,又不知道有多少口誅筆伐的文章。
我曾經(jīng)在HANA篇里寫過圍繞MapReduce,Google和Michael StoneBraker等等database的元老之間的論戰(zhàn)。歡迎大家先讀讀這篇八卦文。為了避免重復(fù),這篇文章里,我就不再展開這部分的話題了。
作為論文來說MapReduce嚴(yán)格的來講不能算作一篇論文,因?yàn)樗v述了兩件不同的事情。其一是一個(gè)叫做MapReduce的編程模型。其二是大規(guī)模數(shù)據(jù)處理的體系架構(gòu)的實(shí)現(xiàn)。
這篇論文將兩者以某種方式混雜在一起來達(dá)到不可告人的目的,并且把這個(gè)體系吹得非常的牛,但是卻并沒有討論一些Google內(nèi)部造就知道的局限性,以我對(duì)某狗的某些表現(xiàn)來看,恐怕我的小人之心覺得有意為之的可能性比較大。
因此當(dāng)智商比較低的Yahoo活雷鋒抄襲MapReduce的時(shí)候弄出的Hadoop是不倫不類,這才有了后來Hadoop V2以及Yarn的引進(jìn)。當(dāng)然這是后話。
作為同樣抄襲對(duì)象的微軟就顯得老道很多。微軟內(nèi)部支撐大數(shù)據(jù)分析的平臺(tái)Cosmos是狠狠的抄襲了Google的File system卻很大程度上摒棄了MapReduce這個(gè)框架。
我們先看看作為編程模型的MapReduce。所謂MapReduce的意思是任何的事情只要都嚴(yán)格遵循Map Shuffle Reduce三個(gè)階段就好。
其中Shuffle是系統(tǒng)自己提供的而Map和Reduce則用戶需要寫代碼。Map是一個(gè)per record的操作。
任何兩個(gè)record之間都相互獨(dú)立。Reduce是個(gè)per key的操作,相同key的所有record都在一起被同時(shí)操作,不同的key在不同的group下面,可以獨(dú)立運(yùn)行。
這就像是說我們有一把大砍刀,一個(gè)錘子。
世界上的萬事萬物都可以先砍幾刀再錘幾下,就能搞定。至于刀怎么砍,錘子怎么錘,那就算個(gè)人的手藝了。 從計(jì)算模型的角度來看,這個(gè)模型極其的粗糙。
所以現(xiàn)在連Google自己都不好意思繼續(xù)鼓吹MapReduce了。從做數(shù)據(jù)庫(kù)的人的角度來看這無非是一個(gè)select一個(gè)groupby,這些花樣197x的時(shí)候在SystemR里都被玩過了。數(shù)據(jù)庫(kù)領(lǐng)域玩這些花樣無數(shù)遍。真看不出有任何值得鼓吹的道理。
因此,在計(jì)算模型的角度上來說,我覺得Google在很大程度上誤導(dǎo)和夸大了MapReduce的實(shí)際適用范圍,也可能是自己把自己也給忽悠了。
在Google內(nèi)部MapReduce最大的應(yīng)用是作為inverted index的build的平臺(tái)。所謂inverted index是information retrieval里面一個(gè)重要的概念,簡(jiǎn)單的講是從單詞到包含單詞的文本的一個(gè)索引。我們搜索internet,google需要爬蟲把網(wǎng)頁(yè)爬下來,然后建立出網(wǎng)頁(yè)里面的單詞到這個(gè)網(wǎng)頁(yè)的索引。
這樣我們輸入關(guān)鍵字搜索的時(shí)候,對(duì)應(yīng)的頁(yè)面才能出來。也正因?yàn)槭沁@樣,所以Google的論文里面用了word count這個(gè)例子。下圖是word count的MapReduce的一個(gè)示意圖。
然而我們需要知道的是,Google后來公布的信息顯示它的廣告系統(tǒng)是一直運(yùn)行在MySQL的cluster的,該做join的時(shí)候也是做join的。
MapReduce作為一個(gè)編程模型來說,顯然不是萬能的藥??墒且?yàn)榫幊棠P蜕婕暗氖鞘澜缬^方法論的問題。
于是催生了無數(shù)篇論文,大致的套路都是我們?cè)趺礃佑肕apReduce去解決這個(gè)那個(gè)問題。這些論文催生了無數(shù)PhD,幫助很多老師申請(qǐng)到了很多的錢。
我覺得很大程度上都掉進(jìn)了google的神話和這個(gè)編程模型的坑。 MapReduce這篇論文的另外一個(gè)方面是系統(tǒng)實(shí)現(xiàn)。我們可以把題目寫成:如何用一堆廉價(jià)PC去穩(wěn)定的實(shí)現(xiàn)超大規(guī)模的并行數(shù)據(jù)處理。
我想這無疑可以體現(xiàn)出這篇論文真正有意義的地方。的確,數(shù)據(jù)庫(kù)的工業(yè)界和學(xué)術(shù)界都玩了幾十年了,有哪個(gè)不是用高端的機(jī)器。
在MapReduce論文出來的那個(gè)時(shí)候,誰能處理1個(gè)PB的數(shù)據(jù)我給誰跪了。但是Google就能啊。我得意的笑我得意的笑。
所以Google以它十分牛逼的數(shù)據(jù)處理平臺(tái),去吹噓那個(gè)沒有什么價(jià)值的編程模型。而數(shù)據(jù)庫(kù)的人以攻擊Google十分不行的編程模型,卻故意不去看Google那個(gè)十分強(qiáng)悍的數(shù)據(jù)處理平臺(tái)。
這場(chǎng)馮京對(duì)馬涼的比賽,我覺得毫無意義。 那么我們來看看為什么Google可以做到那么大規(guī)模的數(shù)據(jù)處理。
首先這個(gè)系統(tǒng)的第一條,很簡(jiǎn)單,所有的中間結(jié)果可以寫入到一個(gè)穩(wěn)定的,不因?yàn)閱螜C(jī)的失敗而不能工作的分布式海量文件系統(tǒng)。GFS的偉大可見一斑。沒有GFS,玩你妹的MapReduce。沒有一個(gè)database廠商做出過偉大的GFS,當(dāng)然也就沒辦法做出這么牛叉的MapReduce了。
這個(gè)系統(tǒng)的第二條也很簡(jiǎn)單,能夠?qū)蝹€(gè)worker進(jìn)行自動(dòng)監(jiān)視和retry。這一點(diǎn)就使得單個(gè)節(jié)點(diǎn)的失敗不是問題,系統(tǒng)可以自動(dòng)的進(jìn)行管理。加上Google一直保持著絕不泄密的資源管理系統(tǒng)Borg。使得Google對(duì)于worker能夠進(jìn)行有效的管理。
Borg這個(gè)系統(tǒng)存在有10多年了,但是Google故意什么都不告訴大家,論文里也假裝沒有。我第一次聽說是幾個(gè)從Google出來的人在Twitter想重新搞這樣一個(gè)東西。然而一直到以docker為代表的容器技術(shù)的出現(xiàn),才使得大家知道google的Borg作為一個(gè)資源管理和虛擬化系統(tǒng)到底是怎么樣做的。
而以docker為代表的容器技術(shù)的出現(xiàn)也使得Borg的優(yōu)勢(shì)不存在了。所以Google姍姍來遲的2015年終于發(fā)了篇論文。我想這也是Yahoo這個(gè)活雷鋒沒有抄好,而HadoopV2必須引入Yarn的很重要的原因。
解釋這么多,其實(shí)是想說明幾點(diǎn),MapReduce作為編程模型,是一個(gè)很傻的模型。完全基于MapReduce的很多project都不太成功。
而這個(gè)計(jì)算模型最重要的是做inverted index build,這就使得Google長(zhǎng)久以來宣揚(yáng)的Join沒意義的論調(diào)顯得很作。另外隨著F1的披露,大家知道Google的Ads系統(tǒng)實(shí)際上長(zhǎng)期運(yùn)行在MySQL上,這也從側(cè)面反應(yīng)了Google內(nèi)部的一些情況和當(dāng)初論文的高調(diào)宣揚(yáng)之間的矛盾。
Google真正值得大家學(xué)習(xí)的是它怎么樣實(shí)現(xiàn)了大規(guī)模數(shù)據(jù)并發(fā)的處理。這個(gè)東西說穿了,一是依賴于一個(gè)很牛的文件系統(tǒng),二是有著很好的自動(dòng)監(jiān)控和重試機(jī)制。
而MapReduce這個(gè)編程模型又使得這兩者的實(shí)現(xiàn)都簡(jiǎn)化了。然而其中很重要的資源管理系統(tǒng)Borg又在當(dāng)初的論文里被徹底隱藏起來了。我想,隨著各種信息的披露,我只能說一句,你妹的。
MapReduce給學(xué)術(shù)界掀起了一片灌水高潮,學(xué)術(shù)界自?shī)首詷返木駥?shí)在很值得敬佩。然而這個(gè)東西火得快,死的也快。所謂人怕出名豬怕撞。
同系列之: