Taiwan Hadoop Forum
http://forum.hadoop.tw/

Hadoop streaming mapper and reducer
http://forum.hadoop.tw/viewtopic.php?f=7&t=38357
1 頁 (共 1 頁)

發表人:  dearjack [ 2017-04-15, 17:19 ]
文章主題 :  Hadoop streaming mapper and reducer

Hi

最近在學寫mapper and reducer 程式,使用python3 來寫,但出現一個疑問,想請教,如下:

為什麼mapper and reducer 程式要分開來寫跟寫在一起同一個檔案裡面的差異?如果寫在同一個mapper.py檔案,這樣hadoop streaming,只能下 -mapper 選項,對於運算結果沒有差異,這是我試的結果,還有其他見解嗎?這樣hadoop 系統在執行只會使用到mapper 功能,不會用到reducer功能嗎?因為我在同一個檔案做完所有工作,這樣運算會比較慢嗎?

發表人:  jazz [ 2017-04-16, 23:27 ]
文章主題 :  Re: Hadoop streaming mapper and reducer

dearjack 寫:
Hi
最近在學寫mapper and reducer 程式,使用python3 來寫,但出現一個疑問,想請教,如下:
為什麼mapper and reducer 程式要分開來寫跟寫在一起同一個檔案裡面的差異?如果寫在同一個mapper.py檔案,這樣hadoop streaming,只能下 -mapper 選項,對於運算結果沒有差異,這是我試的結果,還有其他見解嗎?這樣hadoop 系統在執行只會使用到mapper 功能,不會用到reducer功能嗎?因為我在同一個檔案做完所有工作,這樣運算會比較慢嗎?


hadoop streaming 的 mapper 與 reducer 的限制是用 STDIN 當輸入,用 STDOUT 當輸出。
因此 -mapper 後面接的執行檔縱使裡面也包含了其他 reduce 函數,那 main 函數該怎麼切換 map 或 reduce 函數呢?

只下 -mapper 不用 -reducer 的意思是使用 identity function ( f(N) = N ) 當 reducer
一樣會額外加跑 sort by key ,結果會是根據 key 排序過的結果。
除非額外再加上 -D mapred.reduce.tasks=0 參數
https://hadoop.apache.org/docs/r1.2.1/s ... -Only+Jobs

至於運算的速度,就是一個常見的迷思。快與慢牽涉到你跑 Local Mode 還是 Dsitrbuted Mode
牽涉到資料量的大小,資料搬運的時間是否遠小於運算的時間。因此不會有標準答案說會比較快或比較慢。
學理上請參考 阿姆達爾定律(Amdahl‘s law)
https://zh.wikipedia.org/wiki/%E9%98%BF ... A%E5%BE%8B

- Jazz

發表人:  dearjack [ 2017-04-18, 08:51 ]
文章主題 :  Re: Hadoop streaming mapper and reducer

謝謝,Jazz

您說mapper及reducer函數,是python3的標準函數庫的嗎?因為我在寫,mapper and reducer , 都是自己寫,沒有使用標準函數功能?

發表人:  jazz [ 2017-04-23, 21:23 ]
文章主題 :  Re: Hadoop streaming mapper and reducer

dearjack 寫:
謝謝,Jazz
您說mapper及reducer函數,是python3的標準函數庫的嗎?因為我在寫,mapper and reducer , 都是自己寫,沒有使用標準函數功能?


不是,Hadoop Streaming 可以指定任意「執行檔」當作 mapper 或 reducer 函數,只要符合 STDIN 當輸入,STDOUT 當輸出即可。
例如,http://trac.3du.me/cloud/wiki/Streaming 寫了 Shell 與 PHP 的範例。
所以不管你用 Python2 還 Python3,只要該函數符合用 STDIN 當輸入,STDOUT 當輸出就可以餵給 Hadoop Streaming。
參考簡報 - http://trac.3du.me/cloud/raw-attachment/wiki/III150110/part-6.pdf

實際上 Hadoop Streaming 還是用 Java 執行,只是透過類似 Python 的 system 指令去執行 Shell/PHP/Python 等執行檔。

- Jazz

發表人:  dearjack [ 2017-05-08, 09:33 ]
文章主題 :  Re: Hadoop streaming mapper and reducer

謝謝,Jazz

jazz 寫:
dearjack 寫:
謝謝,Jazz
您說mapper及reducer函數,是python3的標準函數庫的嗎?因為我在寫,mapper and reducer , 都是自己寫,沒有使用標準函數功能?


不是,Hadoop Streaming 可以指定任意「執行檔」當作 mapper 或 reducer 函數,只要符合 STDIN 當輸入,STDOUT 當輸出即可。
例如,http://trac.3du.me/cloud/wiki/Streaming 寫了 Shell 與 PHP 的範例。
所以不管你用 Python2 還 Python3,只要該函數符合用 STDIN 當輸入,STDOUT 當輸出就可以餵給 Hadoop Streaming。
參考簡報 - http://trac.3du.me/cloud/raw-attachment/wiki/III150110/part-6.pdf

實際上 Hadoop Streaming 還是用 Java 執行,只是透過類似 Python 的 system 指令去執行 Shell/PHP/Python 等執行檔。

- Jazz

1 頁 (共 1 頁) 所有顯示的時間為 UTC + 8 小時
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/