天天看點

面試那點事之 白話了解: MapReduce 詳細執行步驟

MapReduce 詳細執行步驟一共有八部,我把他簡稱為:天龍八部 

天龍八部

執行步驟:

1. map任務處理

1.1 讀取輸入檔案内容,解析成key、value對。對輸入檔案的每一行,解析成key、value對。每一個鍵值對調用一次map函數。

1.2 寫自己的邏輯,對輸入的key、value處理,轉換成新的key、value輸出。

1.3 對輸出的key、value進行分區。 

白話了解分區:看mapreduce的原理圖map輸出的這3個分支就代表3個分區,map的輸出怎麼會輸出3個分區呢,他有可能輸出10 或者輸出1個分區嗎,答案是都有可能,他分成幾個分區是由誰來覺得的,這與業務相關。,我們的map任務在1.3中會對map進行分區

1.4 對不同分區的資料,按照key進行排序、分組。相同key的value放到一個集合中。

白話了解排序:對不同分區,這裡的對象變了,是不同分區,按照key進行排序,【這裡的key就是1.2中的輸出】如果能key能排序意味着key他是實作了combarable接口的。實作了combarTo方法,還有一個分組,分組: 是他把相同key的value放到一個集合中,我說把相同key的value放到一個集合中,并沒說集合中的元素怎麼處理,僅僅是放到一個集合中

1.5 (可選)分組後的資料進行歸約。

白話了解歸約:簡單了解 就是把大的資料集合變為小的資料集合這個過程叫做歸約。舉例(eg)加減乘除,加減乘除運算是一個等式運算,等式的左邊是多個元素、右邊是一個元素,那麼把多元素的集合就變成一個元素的集合了,這個步驟就是歸約。

歸約是可選的,因不是所有的資料都适合規約,比如,絕對值

2.reduce任務處理

2.1 對多個map任務的輸出,按照不同的分區,通過網絡copy到不同的reduce節點。

2.2 對多個map任務的輸出進行合并、排序。寫reduce函數自己的邏輯,對輸入的key、value處理,轉換成新的key、value輸出。

白話了解reduce 2.2階段的合并,:為什麼合并,因為是多個map,為什麼排序,前面不是排序好了嗎。注意,每一個map任務是排序好,但是多個map任務之間是沒有排序的,我們的reduce接受的是多map任務,所有他要重新排序,排序完成後我們要覆寫reduce函數實作自己的業務邏輯,對輸入的key、value處理,轉換成新的key、value輸出。【提示:這個地方類似與map1.4階段的執行過程,需要注意的時候,map 1.4階段輸出是以個分組,是分組資料調用reduce,不是一個一個的鍵值對調用reduce】

2.3 把reduce的輸出儲存到檔案中。

轉載于:https://my.oschina.net/dataRunner/blog/363005

繼續閱讀