Mapreduce mapper是否以任何方式使用共享数据?

Mapreduce mapper是否以任何方式使用共享数据?,mapreduce,hashmap,share,Mapreduce,Hashmap,Share,我希望我的映射程序使用哈希映射来检查某些内容。散列映射值对于所有映射器和每个映射器加载都是相同的,每个映射器加载单独使用,并且所有内存都由该映射器消耗。我想让散列映射加载一个,所有映射程序都使用它。你有什么办法吗?我知道每个地图绘制者都使用不同的JVM机器。 谢谢大家有一种叫做分布式缓存的东西。即使使用分布式缓存,您也无法在两个MapperJVM进程之间共享内存(您的hashmap)。 但这种分布式缓存的目的是将小文件(如查找文件)分发到集群中的所有节点上。同样,您必须为节点中的每个映射程序进程

我希望我的映射程序使用哈希映射来检查某些内容。散列映射值对于所有映射器和每个映射器加载都是相同的,每个映射器加载单独使用,并且所有内存都由该映射器消耗。我想让散列映射加载一个,所有映射程序都使用它。你有什么办法吗?我知道每个地图绘制者都使用不同的JVM机器。
谢谢大家

有一种叫做分布式缓存的东西。即使使用分布式缓存,您也无法在两个MapperJVM进程之间共享内存(您的hashmap)。
但这种分布式缓存的目的是将小文件(如查找文件)分发到集群中的所有节点上。同样,您必须为节点中的每个映射程序进程分别构造hashmap。

将hashmap定义为**map类中的静态成员变量
定义
static boolean init_once=false

在Setup函数之外,初始化Setup中的hash映射(在每个任务中调用Setup一次,但是所有maptask共享都可以共享hash映射)

在设置函数中定义布尔init_once=false

if(!init_once)
{
   init_once = true;
   //* you init code here
}

注意:它不是线程安全的,如果hadoop maptask在多线程模式下运行,则应使用互斥来确保操作是itom

@vahid Map/Reduce未明确设置为这种方式。如果其中一个映射器出现故障并需要重新启动,会发生什么情况?也许你应该研究一下MPI之类的东西。少量的信令信息可以通过计数器共享,计数器与每个心跳信号一起传输

我这样做了,但每个映射都会加载哈希映射。我知道,每个任务都会调用安装程序。我听说每个任务跟踪器是否会运行哈希映射定义为静态,而不是测试。@vahid,我对此不确定,我更新了关于init部分的答案,我想在映射程序JVM进程和分布式缓存之间共享内存,但这对我来说不起作用。如果其中一个映射程序失败,在我的情况下不会有任何问题。MPI非常累人,我不喜欢这样。我强制减少映射器的数量,每个映射器使用1.5GB内存,而不是一天内完成就是两天内完成。