1. 程式人生 > >MapReduce程式設計模型的認識

MapReduce程式設計模型的認識

                                                                             MapReduce程式設計模型的認識

對於這個問題的探討是因為我在面試中被問到這個問題:

你覺得MapReduce程式設計與你在平時的程式設計上有什麼不同呢?

我當時就蒙了,真沒有注意到這個基本的認知問題,沒回答上來。

下去後開始百度起來了。。。。。。。下面是一些資料和認知。

在百度百科中的解釋是:

........概念"Map(對映)"和"Reduce(歸約)",是它們的主要思想,都是從函數語言程式設計語言裡借來的,還有從向量程式語言裡借來的特性。”

我們看到的關鍵字眼是:“函數語言程式設計”、“向量程式設計”

如何理解:函數語言程式設計、向量程式設計

在百度之前繼續看:

“當前的軟體實現是指定一個Map(對映)函式,用來把一組鍵值對對映成一組新的鍵值對,指定併發的Reduce(歸約)函式,用來保證所有對映的鍵值對中的每一個共享相同的鍵組。”

對其思想來源可以參考百度百科或其他的參考資料。

“這樣我們就可以把MapReduce理解為,把一堆雜亂無章的資料按照某 種特徵歸納起來,然後處理並得到最後的結果。Map面對的是雜亂無章的互不相關的資料,它解析每個資料,從中提取出key和value,也就是提取了資料 的特徵。經過MapReduce的Shuffle階段之後,在Reduce階段看到的都是已經歸納好的資料了,在此基礎上我們可以做進一步的處理以便得到 結果。這就回到了最初,終於知道MapReduce為何要這樣設計。[3] ”

但是對於函式程式設計仍然是沒有得到認識,此處做出結論是函數語言程式設計是陽春白雪。但是還是想看看其真正的面目:至少感知一下它是個什麼東西:

我覺得這篇文章說的很不錯的。

函數語言程式設計是一種程式語言向更高抽象階段發展的自然進化結果。

這讓我進一步瞭解到jdk8已經出現對函數語言程式設計的支援,很高興,在這裡JDK8中的Stream API 與 lambda 塊來支援高階函式。

並且提出函數語言程式設計是一個高階的方向。

關於MapReduce的認知:我覺得以我現在的水平對其理解仍然只是層面上的,只有對於函數語言程式設計有所理解時才會領略到它的精髓。目前就以這個結尾吧:

MapReduce是分為map階段和reduce階段。其中map階段能夠在一堆混雜的資料中按照開發者的意向抽取需要的資料特徵,交給reduce函式來歸納輸出最終的結果。