Taiwan Hadoop Forum

台灣 Hadoop 技術討論區
現在的時間是 2022-06-30, 04:13

所有顯示的時間為 UTC + 8 小時




發表新文章 回覆主題  [ 5 篇文章 ] 
發表人 內容
 文章主題 : 請問Reducer與reduce之間的差別?一台電腦有一個Reducer好幾個reduce平行處理?
文章發表於 : 2013-12-26, 23:23 
離線

註冊時間: 2013-10-15, 21:01
文章: 50
感謝jazz大大的幫忙,小弟最近有時間都再用hadoop,也買了hadoop技術手冊三版與hadoop實戰技術手冊
我覺得寫得蠻不錯的,推一下
離提了

我想請問一台電腦只會有一個Reducer然後可以有好幾個reduce做平行處理嗎??
因為小弟最近看到setNumReduceTasks()這個方法讓我有點搞不清楚這個是宣告什麼

假設我再伪分散式系統下跑MapReduce,如果我map輸出有6個key
setNumReduceTasks設為3

所以Reducer在執行時是會出現
3個reduce平行處理
key1=>key4
key2=>key5
key3=>key6
這樣嗎??

假設我再全分散式系統下跑MapReduce,如果我有三台電腦做,map輸出有9個key
setNumReduceTasks設為2

是指每台電腦會分到3個key,每台電腦會有兩個reduce平行處理
所以Reducer在執行時是會出現
key1=>key3
key2

請問我這樣有錯嗎,煩請大大門指教

如何指定用幾台電腦做與一台電腦有幾個reduce再跑呢??

再請問一個比較大的問題,
假設今天我map出來的key1資料非常龐大,龐大到一台電腦的reducer根本裝不下
如果有3個map,我可以讓reducer先接收map1得key1資料,處理完把不要的東西洩掉
再處理map2得key1資料,處理完把不要的東西洩掉
再處理map3得key1資料,處理完把不要的東西洩掉...這樣嗎,
如果今天一個key的資料非常龐大,Reducer裝不下,是否能有解覺得辦法呢??
非常感謝大大門回答!


回頂端
 個人資料 E-mail  
 
 文章主題 : Re: 請問Reducer與reduce之間的差別?一台電腦有一個Reducer好幾個reduce平行處理?
文章發表於 : 2013-12-27, 16:22 
離線

註冊時間: 2009-11-09, 19:52
文章: 2897
AndyTsai 寫:
假設我再伪分散式系統下跑MapReduce,如果我map輸出有6個key
setNumReduceTasks設為3
所以Reducer在執行時是會出現
3個reduce平行處理
key1=>key4
key2=>key5
key3=>key6
這樣嗎??


對。

AndyTsai 寫:
假設我再全分散式系統下跑MapReduce,如果我有三台電腦做,map輸出有9個key
setNumReduceTasks設為2

是指每台電腦會分到3個key,每台電腦會有兩個reduce平行處理
所以Reducer在執行時是會出現
key1=>key3
key2

請問我這樣有錯嗎,煩請大大門指教


不能把 Reducer 跟電腦劃上等號,因為每台電腦預設可以跑兩個 reducer。
當有三台電腦,合計 6 個 reduce slot (想成三台電腦,每台有兩個插槽,每次有人要用 reduce 會去搶那幾個插槽)
當 setNumReduceTasks 設為 2,意思就是您的程式希望搶到兩個插槽。
至於這兩個插槽是在同一台的兩個插槽,還是兩台機器上各拿到一個插槽,端看機率。

當 mapper 產生 9 個 output key , setNumReduceTask 設為 2
則 Reduce 狀況將是

Reducer Task #1 on Machine A : key 1 -> Key 3 -> Key 5 -> Key 7 -> Key 9
Reducer Task #2 on Machine B : key 2 -> Key 4 -> Key 6 -> Key 8

AndyTsai 寫:
如何指定用幾台電腦做與一台電腦有幾個reduce再跑呢??


設定 mapred-site.xml 中的 mapred.tasktracker.reduce.tasks.maximum 參數

AndyTsai 寫:
再請問一個比較大的問題,
假設今天我map出來的key1資料非常龐大,龐大到一台電腦的reducer根本裝不下
如果有3個map,我可以讓reducer先接收map1得key1資料,處理完把不要的東西洩掉
再處理map2得key1資料,處理完把不要的東西洩掉
再處理map3得key1資料,處理完把不要的東西洩掉...這樣嗎,
如果今天一個key的資料非常龐大,Reducer裝不下,是否能有解覺得辦法呢??
非常感謝大大門回答!


這個現象稱為「鍵空間傾斜(skewed keyspace)」,書中有介紹。
此時第一個可能的解法是加入 Combiner,來降低 Mapper 的輸出量。
其次就是讓 mapper 的輸出資料進行「壓縮」(Hadoop MapReduce 支援 Gzip, Gzip2, 也有 LZO 的 patch)

代碼:
Mapper #1 --> Combiner #1 ------+
                                |
Mapper #2 --> Combiner #2 ------+----> Reducer #1
                                |
Mapper #3 --> Combiner #3 ------+


- Jazz


回頂端
 個人資料 E-mail  
 
 文章主題 : Re: 請問Reducer與reduce之間的差別?一台電腦有一個Reducer好幾個reduce平行處理?
文章發表於 : 2013-12-27, 17:06 
離線

註冊時間: 2013-10-15, 21:01
文章: 50
感謝jazz大大。

所以setNumReduceTasks()是代表mapper得輸出後
要分成幾個插槽處理的意思是嗎,如果只有一台電腦,setNumReduceTasks設為2
代表要用兩個Reducer跑,key得數量會平均分配給兩個Reducer



如果有三台電腦,setNumReduceTasks設為2,
還是有可能一台電腦跑兩個Reducer平均分配mapper得key然後其餘兩台電腦不做事
這樣是嗎??

所以這樣的結論,一個Reducer有一個reduce方法,setNumReduceTasks()是
設定要用幾個Reducer來處理這些key,如果我接了一百台電腦,Reducer設為1,
還是只有一台電腦一個Reducer處理全部key是嗎??

感謝大大指教!


回頂端
 個人資料 E-mail  
 
 文章主題 : Re: 請問Reducer與reduce之間的差別?一台電腦有一個Reducer好幾個reduce平行處理?
文章發表於 : 2013-12-28, 09:52 
離線

註冊時間: 2009-11-09, 19:52
文章: 2897
AndyTsai 寫:
如果有三台電腦,setNumReduceTasks設為2,
還是有可能一台電腦跑兩個Reducer平均分配mapper得key然後其餘兩台電腦不做事
這樣是嗎??
所以這樣的結論,一個Reducer有一個reduce方法,setNumReduceTasks()是
設定要用幾個Reducer來處理這些key,如果我接了一百台電腦,Reducer設為1,
還是只有一台電腦一個Reducer處理全部key是嗎??
感謝大大指教!


1. True.
2. True.

- Jazz


回頂端
 個人資料 E-mail  
 
 文章主題 : Re: 請問Reducer與reduce之間的差別?一台電腦有一個Reducer好幾個reduce平行處理?
文章發表於 : 2013-12-28, 19:07 
離線

註冊時間: 2013-10-15, 21:01
文章: 50
jazz 寫:
AndyTsai 寫:
如果有三台電腦,setNumReduceTasks設為2,
還是有可能一台電腦跑兩個Reducer平均分配mapper得key然後其餘兩台電腦不做事
這樣是嗎??
所以這樣的結論,一個Reducer有一個reduce方法,setNumReduceTasks()是
設定要用幾個Reducer來處理這些key,如果我接了一百台電腦,Reducer設為1,
還是只有一台電腦一個Reducer處理全部key是嗎??
感謝大大指教!


1. True.
2. True.

- Jazz


感謝JAZZ大大回答,受益良多!


回頂端
 個人資料 E-mail  
 
顯示文章 :  排序  
發表新文章 回覆主題  [ 5 篇文章 ] 

所有顯示的時間為 UTC + 8 小時


誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 2 位訪客


不能 在這個版面發表主題
不能 在這個版面回覆主題
不能 在這個版面編輯您的文章
不能 在這個版面刪除您的文章
不能 在這個版面上傳附加檔案

搜尋:
前往 :  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
正體中文語系由 竹貓星球 維護製作