首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hadoop单例模式

Hadoop单例模式
EN

Stack Overflow用户
提问于 2017-01-16 17:33:04
回答 1查看 390关注 0票数 0

我正在尝试实现singleton,它将在hadoop中缓存和验证map reduce作业的配置。让我们将其命名为ConfigurationManager

这是我目前所拥有的:

代码语言:javascript
复制
public class ConfigurationManager {
    private static volatile ConfigurationManager instance;
    private static final String CONF_NAME = "isSomethingEnabled";
    private boolean isSomethingEnabled;

    private ConfigurationManager(Configuration configuration) {
        this.isSomethingEnabled= configuration.getBoolean(CONF_NAME, false);
    }

    public static void init(Configuration configuration) {
        if (instance == null) {
            synchronized (ConfigurationManager.class) {
                if (instance == null) {
                    this.instance = new ConfigurationManager(configuration);
                }
            }
        }
    }

    public static ConfigurationManager get() {
        return instance;
    }

    public boolean isSomethingEnabled() {
        return isSomethingEnabled;
    }
}  

正如你所看到的,它被设计成线程安全的。此外,它不是标准的单例:我分离了初始化方法和访问器方法,以便在get调用时不强制使用hadoop的Configuration实例。因此,为了使用它,我过早地在Tool的祖先中调用了init,然后尝试在reducers中使用get来访问我的单例(比如这个ConfigurationManager.get().isSomethingEnabled()),但是由于某些原因,get返回了null。有人能解释一下这样的行为吗?也许map/reducer是作为单独的进程启动的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-17 23:47:47

每个reduce任务运行在不同的jvm上。这就可以解释空值了。

您可以在以下位置对每个reduce任务执行此操作:Reducer - configure

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41673176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档