一文讀懂MapReduce

2022-03-11 20:40:05 字數 1163 閱讀 7860

hadoop解決大規模資料分布式計算的方案是mapreduce。mapreduce既是乙個程式設計模型,又是乙個計算框架。也就是說,開發人員必須基於mapreduce程式設計模型進行程式設計開發,然後將程式通過mapreduce計算框架分發到hadoop集群中執行。我們先看一下作為程式設計模型的mapreduce。

mapreduce程式設計模型

mapreduce是一種非常簡單又非常強大的程式設計模型。

簡單在於其程式設計模型只包含map和reduce兩個過程,map的主要輸入是一對值,經過map計算後輸出一對值;然後將相同key合併,形成對。

但是mapreduce同時又是非常強大的,不管是關係代數運算(sql計算),還是矩陣運算(圖計算),大資料領域幾乎所有的計算需求都可以通過mapreduce程式設計來實現。

我們以wordcount程式為例。wordcount主要解決文字處理中的詞頻統計問題,就是統計文字中每乙個單詞出現的次數。如果只是統計一篇文章的詞頻,幾十k到幾m的資料,那麼寫乙個程式,將資料讀入記憶體,建乙個hash表記錄每個詞出現的次數就可以了,如下圖。

小資料量的詞頻統計

但是如果想統計全世界網際網路所有網頁(數萬億計)的詞頻數(這正是google這樣的搜尋引擎典型需求),你不可能寫乙個程式把全世界的網頁都讀入記憶體,這時候就需要用mapreduce程式設計來解決。

wordcount的mapreduce程式如下。

public class wordcount  to partition. */ 

public int getpartition(k2 key, v2 value, int numreducetasks) { 

return (key.hashcode() & integer.max_value) % numreducetasks; 

shuffle是大資料計算過程中發生奇蹟的地方,不管是mapreduce還是spark,只要是大資料批處理計算,一定會有shuffle過程,讓資料關聯起來,資料的內在關係和價值才會呈現出來。不理解shuffle,就會在map和reduce程式設計中產生困惑,不知道該如何正確設計map的輸出和reduce的輸入。shuffle也是整個mapreduce過程中最難最消耗效能的地方,在mapreduce早期**中,一半**都是關於shuffle處理的。

一文讀懂Nginx

問 nginx的負載均衡演算法有什麼?預設是什麼演算法?答 1 輪詢 按請求的時間輪詢查空閒的後端伺服器 2 指定輪詢機率 機率的原因是後端伺服器的效能不均勻,好的多分點,差的少分點 3 固定ip繫結固定伺服器 預設是加權輪詢,就是優先訪問權重高的伺服器 問 nginx是單執行緒的嗎?答 是單執行緒...

一文讀懂SpringMVC

主要講的是dispatcherservlet這個類 ioc其實是乙個map,工程啟動後掃瞄路徑,根據類的全限定名建立bean 問 怎麼根據路徑找到方法?map還存key為 aaa value為該controller例項 問 autowired原理?自定義註解,在載入的時候,掃瞄controller層...

堆疊 一文讀懂

堆疊 stack 是一種先進後出的 操作受限的線性表,也可以直接稱為棧。可以把棧想象成乙個桶一樣,往這個桶裡面一層一層的放東西,先放進去的在裡面,後放進去的東西依次在外面。但取東西的時候就是先取靠近外面的,再依次一層層取裡面的。這就是 後進先出 last in first out 的原則。因此 棧 ...