2011-03-04 73 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