3 回答

TA貢獻1868條經(jīng)驗 獲得超4個贊
首先shuffling是將數(shù)據(jù)從映射器傳輸?shù)胶喕鞯倪^程,所以我認(rèn)為對于簡化器來說很明顯是必要的,因為否則,它們將無法獲得任何輸入(或每個映射器的輸入) 。改組甚至可以在地圖階段完成之前開始,以節(jié)省一些時間。因此,當(dāng)?shù)貓D狀態(tài)尚未達到100%時,您會看到縮小狀態(tài)大于0%(但小于33%)。
Sorting為減速器節(jié)省時間,幫助它輕松區(qū)分何時應(yīng)開始新的減速任務(wù)。簡單地說,當(dāng)排序后的輸入數(shù)據(jù)中的下一個鍵與上一個鍵不同時,它只是啟動一個新的reduce任務(wù)。每個reduce任務(wù)都會獲取一個鍵值對列表,但是它必須調(diào)用reduce()方法,該方法接受一個key-list(value)輸入,因此必須按鍵對值進行分組。如果在映射階段對輸入數(shù)據(jù)進行了預(yù)排序(本地),而在歸約階段簡單地進行了歸并排序(因為歸約器從許多映射器獲取數(shù)據(jù)),則這樣做很容易。
Partitioning您在其中一個答案中提到的,是一個不同的過程。它確定映射相位的輸出(鍵,值)對將發(fā)送到哪個減速器。默認(rèn)的分區(qū)程序在鍵上使用哈希將其分配給reduce任務(wù),但是您可以覆蓋它并使用自己的自定義分區(qū)程序。
這些步驟的重要信息來源是此Yahoo教程。
下面是一個很好的圖形表示形式(在此圖中,混洗稱為“復(fù)制”):
請注意,如果您指定零個減速器(setNumReduceTasks(0))shuffling,sorting則根本不會執(zhí)行和。然后,MapReduce作業(yè)在地圖階段停止,并且地圖階段不包括任何種類的排序(因此,即使地圖階段也更快)。
更新:由于您正在尋找更正式的東西,因此您也可以閱讀Tom White的書“ Hadoop:權(quán)威指南”。這是您問題的有趣部分。
Tom White自2007年2月以來一直是Apache Hadoop的提交者,并且是Apache Software Foundation的成員,因此我認(rèn)為它是相當(dāng)可信且正式的...

TA貢獻1848條經(jīng)驗 獲得超6個贊
讓我們回顧一下Mapreduce程序的關(guān)鍵階段。
該地圖相由映射器來完成。映射器在未排序的輸入鍵/值對上運行。每個映射器為每個輸入鍵/值對發(fā)出零個,一個或多個輸出鍵/值對。
該組合相由合成器來完成。該組合應(yīng)結(jié)合鍵/值對具有相同的密鑰。每個組合器可以運行零次,一次或多次。
在洗牌和排序階段是由框架來完成。來自所有映射器的數(shù)據(jù)按鍵分組,在化簡器中拆分,然后按鍵排序。每個化簡器獲得與同一鍵關(guān)聯(lián)的所有值。程序員可以提供用于排序的自定義比較功能,以及用于數(shù)據(jù)拆分的分區(qū)程序。
該分區(qū)決定哪些減速會得到一個特定的鍵值對。
該減速器取得排序鍵/ [值列表]對,排序由所述密鑰。值列表包含由映射器生成的具有相同鍵的所有值。每個縮減器為每個輸入鍵/值對發(fā)出零,一個或多個輸出鍵/值對。
看看這個javacodegeeks 文章由瑪麗亞Jurcovicova和mssqltips由達塔為了更好的理解文章

TA貢獻1827條經(jīng)驗 獲得超4個贊
我想到的只是添加以上答案中缺少的幾點。從這里獲取的這張圖清楚地說明了實際情況。
如果我再說一遍的真正目的
拆分:通過在不同節(jié)點(映射程序)之間分配處理負載來改善并行處理,這將節(jié)省總體處理時間。
合并:縮小每個Mapper的輸出。這樣可以節(jié)省將數(shù)據(jù)從一個節(jié)點移動到另一個節(jié)點的時間。
排序(隨機排序):使運行時可以輕松地計劃(生成/啟動)新的reducer,在瀏覽排序項目列表時,只要當(dāng)前鍵與先前的鍵不同,就可以生成一個新的reducer 。
- 3 回答
- 0 關(guān)注
- 683 瀏覽
添加回答
舉報