Hadoop单例模式的用法

什么都没有

我正在尝试实现单例,该单例将缓存并验证hadoop中的map reduce作业的配置。命名吧ConfigurationManager

这是我现在拥有的:

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;
    }
}  

如您所见,它被设计为线程安全的。此外,它不是标准的单例:我分离了初始化和访问器方法,以不强制Configurationget调用时出现hadoop实例因此,要使用它,我会过早地调用init的祖先,Tool然后尝试在化简器中使用我的单例get(像这样ConfigurationManager.get().isSomethingEnabled()),但是由于某些原因会get返回null有人可以解释这种行为吗?也许地图/缩小器是作为单独的过程启动的?

文卡特

每个reduce任务都在不同的jvm上运行。这将解释为空。

您可以在以下的每个reduce任务中进行操作:Reducer-配置

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章