我希望我的mapper使用哈希映射来检查某些东西。哈希映射值对于所有映射器都是相同的,并且每个映射器加载单独地和所有内存都被它消耗。我希望哈希映射加载一个,所有映射器都使用它。您是否认为有任何办法?我知道每个映射器使用不同的JVM机器。 谢谢大家
答案 0 :(得分:0)
有一种称为分布式缓存的东西。即使使用分布式缓存,您也无法在两个映射器jvm进程之间共享内存(您的hashmap)。 但是,此分布式缓存用于在群集中的所有节点上分发诸如查找文件之类的小文件。而且,您必须为节点中的每个映射器进程单独构建哈希映射。
答案 1 :(得分:0)
将哈希映射定义为** Map Class中的静态成员变量
定义static boolean init_once = false
覆盖设置功能,在设置中初始化哈希映射(在每个任务中调用一次设置,但所有maptask共享都可以共享哈希映射)
在设置函数
中定义布尔init_once = falseif(!init_once)
{
init_once = true;
//* you init code here
}
注意:它不是线程安全的,如果hadoop maptask在多线程模式下运行,应该使用互斥锁来确保操作是itom
答案 2 :(得分:0)
@vahid Map / Reduce明确没有这样设置。如果其中一个映射器出现故障并需要重新启动会发生什么?也许你应该研究像MPI这样的东西。可以通过计数器共享少量信令信息 - 这些计数器与每个心跳一起传输。