Taiwan Hadoop Forum

台灣 Hadoop 技術討論區
現在的時間是 2018-12-14, 11:55

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




發表新文章 回覆主題  [ 4 篇文章 ] 
發表人 內容
 文章主題 : map後恢復正確排序的問題
文章發表於 : 2016-10-24, 00:47 
離線

註冊時間: 2016-10-24, 00:27
文章: 2
大大您好,

小弟近日練習mapreduce函式,以矩陣向量作內積練習(僅用map function)。
但由於mapreduce屬分散式運算,
input被切割進行運算後,
導致map後的回傳值順序被打亂。

想請教有無找回原順序的技巧。

example:
引言回覆:
matrix(1:4,ncol=2)%*%c(1:2)

回傳值順序為7,10,順序正確。
但若分散式運算,反而可能會得到10,7(順序錯誤),
因為mapreduce切割後先將c(2,4)%*%c(1:2)擺在前順位。

*此時,我是否有任何函式上的方法,或邏輯上的技巧讓回傳值恢復原來的順序呢?

感謝大大QQ


回頂端
 個人資料 E-mail  
 
 文章主題 : Re: map後恢復正確排序的問題
文章發表於 : 2016-11-03, 12:15 
離線

註冊時間: 2009-11-09, 19:52
文章: 2897
zxc940907 寫:
大大您好,
小弟近日練習mapreduce函式,以矩陣向量作內積練習(僅用map function)。
但由於mapreduce屬分散式運算,
input被切割進行運算後,
導致map後的回傳值順序被打亂。

想請教有無找回原順序的技巧。
example:
引言回覆:
matrix(1:4,ncol=2)%*%c(1:2)

回傳值順序為7,10,順序正確。
但若分散式運算,反而可能會得到10,7(順序錯誤),
因為mapreduce切割後先將c(2,4)%*%c(1:2)擺在前順位。
*此時,我是否有任何函式上的方法,或邏輯上的技巧讓回傳值恢復原來的順序呢?
感謝大大QQ


引言回覆:
matrix(1:4,ncol=2)%*%c(1:2)

請問這個是 Python 語法?還是 R ?感覺有點像 R 的語法~

由於看不太懂,所以只能從觀念上先釐清。
MapReduce 採用的是 Share Nothing 的 Programming Model
所以無法確保輸入被運算的順序,如果有 Reduce 的話,
理論上在 Hadoop 實作的 MapReduec 中間是有 sort by key 的動作。
輸出會依據 key 的順序排序。
(如果您使用的是 RMR (RHadoop 的 MapReduce)的話,就會依照 Key 的順序輸出)

- Jazz


回頂端
 個人資料 E-mail  
 
 文章主題 : Re: map後恢復正確排序的問題
文章發表於 : 2016-11-03, 12:17 
離線

註冊時間: 2009-11-09, 19:52
文章: 2897
zxc940907 寫:
大大您好,
小弟近日練習mapreduce函式,以矩陣向量作內積練習(僅用map function)。


由於「僅用 map function」,因此在分散運算的狀態下,只能將回傳值再自行做一次 sort

Example:
代碼:
sort(matrix(1:4,ncol=2)%*%c(1:2))


若輸出太大,無法單機做 sort,那只好使用 identity function ( A -> A ) 當 reduce function,然後調整 reducer 個數,產生區域排序的結果。

- Jazz


回頂端
 個人資料 E-mail  
 
 文章主題 : Re: map後恢復正確排序的問題
文章發表於 : 2016-12-06, 14:17 
離線

註冊時間: 2016-10-24, 00:27
文章: 2
引言回覆:
請問這個是 Python 語法?還是 R ?感覺有點像 R 的語法~

由於看不太懂,所以只能從觀念上先釐清。
MapReduce 採用的是 Share Nothing 的 Programming Model
所以無法確保輸入被運算的順序,如果有 Reduce 的話,
理論上在 Hadoop 實作的 MapReduec 中間是有 sort by key 的動作。
輸出會依據 key 的順序排序。
(如果您使用的是 RMR (RHadoop 的 MapReduce)的話,就會依照 Key 的順序輸出)


是的大大,是用RHadoop沒錯。
我有了解大大的意思了。
只是想再深入問一下,
若一個矩陣在讀入時會被打亂,
那勢必我們需要在讀入前,先為矩陣增添一欄c(1:nrow(matrix))的序列,
並在map階段取出做為key,如此一來,經由reduce階段後,才能輸出正常排序。
但新增一欄的動作,豈不是又會造成原來的數據大小再膨脹嗎?
還是說,有不增加序列,卻可以在"無法確保輸入被運算的順序"下,給出正確排序的方法?


另外,想請問大大,
使用RMR2,有方法針對不同的map tasks & reduce tasks進行不同的資料處理操作嗎?
例如:
map task1將matrix*2;
map task2將matrix*3
這樣的差異操作。

非常感謝大大


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

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


誰在線上

正在瀏覽這個版面的使用者:Majestic-12 [Bot] 和 1 位訪客


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

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