我有一个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