我有一個Hadoop流設置工作,但是當初始化每個文件完成一次的映射時會有一些開銷,並且由於我正在處理很多文件,所以我注意到我正在花費初始化時間很長。Hadoop按照每個映射工作流多個文件
有沒有辦法,而不寫任何Java,指定我想重複使用相同的映射器實例爲多個文件來攤銷初始化成本?
我有一個Hadoop流設置工作,但是當初始化每個文件完成一次的映射時會有一些開銷,並且由於我正在處理很多文件,所以我注意到我正在花費初始化時間很長。Hadoop按照每個映射工作流多個文件
有沒有辦法,而不寫任何Java,指定我想重複使用相同的映射器實例爲多個文件來攤銷初始化成本?
在$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
設置爲所需值來指定每個作業。
感謝您的回答。 – 2011-03-04 22:46:20
然而,從頂端來看,它看起來我的映射器腳本仍然經常被催生;換句話說,現在我的映射程序腳本的JVM所有者仍然存在(這是很好的,我猜);但我所指的初始化開銷是在我的映射器腳本中。有沒有辦法在多個文件上重用* mapper腳本? – 2011-03-04 22:47:47
如果您正在'map'函數中進行初始化,請覆蓋'setup'函數並在那裏進行初始化。還有一個可以被覆蓋的「清除」功能。 'setup'和'cleanup'只會在每個映射器實例中調用一次(在這種情況下,每個JVM只有一次),而'map'函數將被調用多次,因爲可以使用JVM。移動任何你可以'設置'可能會提高性能。 – Nija 2011-03-04 23:06:49
爲了澄清,這是我的映射器腳本(用Perl編寫),它有很大的初始化開銷,所以我正在尋找通過許多文件重用每個腳本實例。 – 2011-03-04 22:48:37