2011-03-04 71 views
0

我有一個Hadoop流設置工作,但是當初始化每個文件完成一次的映射時會有一些開銷,並且由於我正在處理很多文件,所以我注意到我正在花費初始化時間很長。Hadoop按照每個映射工作流多個文件

有沒有辦法,而不寫任何Java,指定我想重複使用相同的映射器實例爲多個文件來攤銷初始化成本?

+0

爲了澄清,這是我的映射器腳本(用Perl編寫),它有很大的初始化開銷,所以我正在尋找通過許多文件重用每個腳本實例。 – 2011-03-04 22:48:37

回答

0

$HADOOP_HOME/conf/mapred-site.xml添加/編輯後續財產

<property> 
    <name>mapred.job.reuse.jvm.num.tasks</name> 
    <value>#</value> 
</property> 

#可以設置爲一個數字,以指定JVM是多少次重複使用(默認爲1),或者設置爲-1重複使用量沒有限制。

還可以通過將作業配置mapred.job.reuse.jvm.num.tasks設置爲所需值來指定每個作業。

+0

感謝您的回答。 – 2011-03-04 22:46:20

+0

然而,從頂端來看,它看起來我的映射器腳本仍然經常被催生;換句話說,現在我的映射程序腳本的JVM所有者仍然存在(這是很好的,我猜);但我所指的初始化開銷是在我的映射器腳本中。有沒有辦法在多個文件上重用* mapper腳本? – 2011-03-04 22:47:47

+0

如果您正在'map'函數中進行初始化,請覆蓋'setup'函數並在那裏進行初始化。還有一個可以被覆蓋的「清除」功能。 'setup'和'cleanup'只會在每個映射器實例中調用一次(在這種情況下,每個JVM只有一次),而'map'函數將被調用多次,因爲可以使用JVM。移動任何你可以'設置'可能會提高性能。 – Nija 2011-03-04 23:06:49