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