亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Map Reduce編程中的reducer的改組和排序階段的目的是什么?

Map Reduce編程中的reducer的改組和排序階段的目的是什么?

千萬里不及你 2019-11-22 13:03:01
在Map Reduce編程中,reduce階段具有改組,排序和reduce的子部分。排序是一件昂貴的事情。Map Reduce編程中的reducer的改組和排序階段的目的是什么?
查看完整描述

3 回答

?
MYYA

TA貢獻1868條經驗 獲得超4個贊

首先shuffling是將數據從映射器傳輸到簡化器的過程,所以我認為對于簡化器來說很明顯是必要的,因為否則,它們將無法獲得任何輸入(或每個映射器的輸入) 。改組甚至可以在地圖階段完成之前開始,以節省一些時間。因此,當地圖狀態尚未達到100%時,您會看到縮小狀態大于0%(但小于33%)。


Sorting為減速器節省時間,幫助它輕松區分何時應開始新的減速任務。簡單地說,當排序后的輸入數據中的下一個鍵與上一個鍵不同時,它只是啟動一個新的reduce任務。每個reduce任務都會獲取一個鍵值對列表,但是它必須調用reduce()方法,該方法接受一個key-list(value)輸入,因此必須按鍵對值進行分組。如果在映射階段對輸入數據進行了預排序(本地),而在歸約階段簡單地進行了歸并排序(因為歸約器從許多映射器獲取數據),則這樣做很容易。


Partitioning您在其中一個答案中提到的,是一個不同的過程。它確定映射相位的輸出(鍵,值)對將發送到哪個減速器。默認的分區程序在鍵上使用哈希將其分配給reduce任務,但是您可以覆蓋它并使用自己的自定義分區程序。


這些步驟的重要信息來源是此Yahoo教程。


下面是一個很好的圖形表示形式(在此圖中,混洗稱為“復制”):


請注意,如果您指定零個減速器(setNumReduceTasks(0))shuffling,sorting則根本不會執行和。然后,MapReduce作業在地圖階段停止,并且地圖階段不包括任何種類的排序(因此,即使地圖階段也更快)。


更新:由于您正在尋找更正式的東西,因此您也可以閱讀Tom White的書“ Hadoop:權威指南”。這是您問題的有趣部分。

Tom White自2007年2月以來一直是Apache Hadoop的提交者,并且是Apache Software Foundation的成員,因此我認為它是相當可信且正式的...


查看完整回答
反對 回復 2019-11-22
?
慕勒3428872

TA貢獻1848條經驗 獲得超6個贊

讓我們回顧一下Mapreduce程序的關鍵階段。


該地圖相由映射器來完成。映射器在未排序的輸入鍵/值對上運行。每個映射器為每個輸入鍵/值對發出零個,一個或多個輸出鍵/值對。


該組合相由合成器來完成。該組合應結合鍵/值對具有相同的密鑰。每個組合器可以運行零次,一次或多次。


在洗牌和排序階段是由框架來完成。來自所有映射器的數據按鍵分組,在化簡器中拆分,然后按鍵排序。每個化簡器獲得與同一鍵關聯的所有值。程序員可以提供用于排序的自定義比較功能,以及用于數據拆分的分區程序。


該分區決定哪些減速會得到一個特定的鍵值對。


該減速器取得排序鍵/ [值列表]對,排序由所述密鑰。值列表包含由映射器生成的具有相同鍵的所有值。每個縮減器為每個輸入鍵/值對發出零,一個或多個輸出鍵/值對。


看看這個javacodegeeks 文章由瑪麗亞Jurcovicova和mssqltips由達塔為了更好的理解文章


查看完整回答
反對 回復 2019-11-22
?
GCT1015

TA貢獻1827條經驗 獲得超4個贊

我想到的只是添加以上答案中缺少的幾點。從這里獲取的這張圖清楚地說明了實際情況。


如果我再說一遍的真正目的


拆分:通過在不同節點(映射程序)之間分配處理負載來改善并行處理,這將節省總體處理時間。


合并:縮小每個Mapper的輸出。這樣可以節省將數據從一個節點移動到另一個節點的時間。


排序(隨機排序):使運行時可以輕松地計劃(生成/啟動)新的reducer,在瀏覽排序項目列表時,只要當前鍵與先前的鍵不同,就可以生成一個新的reducer 。


查看完整回答
反對 回復 2019-11-22
  • 3 回答
  • 0 關注
  • 687 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號