是否可以在一个JVM中运行多个map任务?

我想在Hadoop中为我的地图任务共享大内存静态数据(RAM lucene索引)?有几种map / reduce任务共享同一个JVM的方法吗?     
已邀请:
作业可以通过指定作业配置mapred.job.reuse.jvm.num.tasks来重用任务JVM。如果值为1(缺省值),则不重用JVM(即每个JVM 1个任务)。如果为-1,则JVM可以运行的任务数量(同一作业)没有限制。也可以使用api指定大于1的某个值。     
$HADOOP_HOME/conf/mapred-site.xml
中添加以下属性
<property>
    <name>mapred.job.reuse.jvm.num.tasks</name>
    <value>#</value>
</property>
可以将
#
设置为一个数字,以指定JVM重用的次数(默认为
1
),或设置为
-1
,对重用量没有限制。     
无耻的插头 我继续使用JVM重用的静态对象来完成你在这里描述的内容: http://chasebradford.wordpress.com/2011/02/05/distributed-cache-static-objects-and-fast-setup/ 另一个选项,虽然更复杂,但是使用带有只读内存映射文件的分布式缓存。这样,您也可以跨JVM进程共享资源。     
据我所知,多个地图任务(Hadoop)没有简单的方法来共享静态数据结构。 这实际上是当前Map Reduce模型的已知问题。当前实现不跨地图任务共享静态数据的原因是因为Hadoop被设计为高度可靠。因此,如果任务失败,它将只会崩溃自己的JVM。它不会影响其他JVM的执行。 我目前正在研究一种原型,它可以将单个JVM的工作分布在多个核心上(实际上,您只需要一个JVM来利用多核)。这样,您可以减少内存数据结构的重复,而不会降低CPU利用率。对我来说,下一步是开发一个可以在一个JVM中运行多个Map任务的Hadoop版本,这正是您所要求的。 这里有一篇有趣的帖子 https://issues.apache.org/jira/browse/MAPREDUCE-2123     

要回复问题请先登录注册