2012-06-04 58 views

回答

20

他們被稱爲每個任務,所以如果你有20個映射器運行,每個人都會調用setup/cleanup。

一個問題是Mapper和Reducer的標準運行方法不能捕獲map/reduce方法的異常 - 所以如果在這些方法中拋出異常,則不會調用清理方法。

+4

人們總是可以在map/reduce中的異常的catch子句中調用清理方法。然而,這需要對可能的異常進行智能分析並放入try/catch條款來捕捉它們。 – abhinavkulkarni

4

一個澄清是有幫助的。安裝/清理方法用於初始化和清理任務級別。在一個任務中,首先進行初始化,然後對setup()方法進行一次調用,然後完成對map()[或reduce()]函數的所有調用。之後,在退出任務之前將另外調用一次cleanup()方法。

2

它被稱爲每個Mapper任務或Reducer任務。 這裏是hadoop代碼。

public void run(Context context) throws IOException, InterruptedException { 
    setup(context); 
    try { 
     while (context.nextKey()) { 
     reduce(context.getCurrentKey(), context.getValues(), context); 
     } 
    } finally { 
     cleanup(context); 
    } 
    } 
1

關於reducer你可以在工作中做job.setNumReduceTasks(1);這樣,只能運行一次減速器的設置和清理。