谷歌“三駕馬車”的出現,才真正把我們帶入了大資料時代,畢竟沒有谷歌,就沒有大資料,
上次的分享,我們對谷歌的其中一駕寶車 GFS 進行了管中窺豹,雖然只見得其中一斑,但是也能清楚的知道 GFS 能夠把大量廉價的普通機器,聚在一起,充分讓每臺廉價的機器發揮光和熱,不但降低了運營成本,而且解決了一個業界資料存盤的難題,
雖然 GFS 解決了 Google 海量資料的存盤的難題,但是隨之而來的就是“如何從海量資料中快速計算并得到結果的難題”,面對這個難題,誰痛誰想辦法,Google 再次進行技術創新,重磅推出另一篇論文《MapReduce: Simplified Data Processing on Large Clusters》,接下來就一起認識認識 MapReduce,
認識
到底是個啥?說白了,MapReduce 其實就是一個為了簡化海量資料處理而提出的編程模型,
主要思想:分而治之,將一個大規模的問題,分成多個小規模的問題,把多個小規模問題解決,然后再合并小規模問題的解,就能夠解決大規模的問題,
編程模型:我們只需要通過撰寫 Map 函式和 Reduce 函式來指定想要進行的計算,而不用花心思去糾結背后復雜的容錯、資料分發、負載均衡等等一系列技術細節問題,MapReduce 所執行的分布式計算會以一組鍵值對作為輸入,輸出另一組鍵值對,
怎么想的?原來是受 Lisp 以及其它一些函式式編程語言中的 map 和 reduce 原語影響而來的(如果你閑著無聊,再去了解 Lisp 也不遲),
疑惑
百思要求解,說了這么多,感徑訓是一無所知,顯然是一塊硬骨頭,其實在腦海中早已蕩起千層疑問的波,
Map 函式是啥?Reduce 函式又是啥?
接下來我們一起慢慢去體會,
統計大量檔案中每一個單詞出現的次數,這也是大資料技術入門的經典案例“WordCount”,此時需要我們撰寫類似上面的偽代碼,
簡單剖析這段偽代碼,希望對 Map、Reduce 函式有一個深入的認識,
剖析 1:要統計檔案每個單詞出現的次數,顧名思義 map 函式入參 key 是檔案名,value 是檔案的內容,接下來逐個遍歷單詞,每遇到一個單詞 w,就輸出一個中間結果(w, "1"),
剖析 2:reduce 函式入參 key 就是單詞 w,值是一串“1”,然后將這些“1”累加就得到單詞 w 的出現次數,
剖析 3:最后把檔案中單詞的出現次數,輸出到用戶定義的位置,例如存盤到分布式存盤系統 GFS 上,
好了,大資料入門經典案例“WordCount”的偽代碼,到這就剖析個八九不離十,雖然懵懂了不少,但是還是萌生了一些猜想和疑問,
懵懂:Map 函式是啥?Reduce 函式是啥?
Map函式:處理一個基于 key/value 鍵值對的資料集合,同時也輸出基于 key/value 的資料集合;
Reduce函式:用來合并 Map 函式輸出的 key/value 資料集合,
論文中說了,上面偽代碼中輸入輸出雖然都是字串型別的,但事實上,Map 和 Reduce 函式都是有相應型別的,
-
map (k1, v1) -> list(k2, v2)
-
reduce (k2, list(v2)) -> list(v2)
猜想:map、reduce 函式中間感覺又觸發了“針對同一個單詞的 value 的組合(也就是把相同單詞出現的次數,串在一起)”,不然 reduce 函式怎么能接收到 values(每個單詞對應的出現次數的一串“1”),
騎驢看劇本,咱們還是走著瞧唄,
疑問1:map 產生的中間鍵值對,是放到記憶體、本地磁盤還是放到了 GFS 上存盤?
這個問題也是騎驢看劇本,咱們還是走著瞧唄(貌似用錯了語境,別介意,哈哈),
疑問2:我們寫好了 Map 函式和 Reduce 函式,怎么就跑到了多臺機器上呢?
欲知后事如何,咱們還是且聽下回分解,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/19685.html
標籤:大數據
上一篇:從谷歌 GFS 架構設計聊開去
下一篇:悟懂MapReduce,不糾結!
