2017-01-16 4 views
0

私はmapoの設定をキャッシュして検証するシングルトンを実装しようとしています。それはConfigurationManagerと名をつけましょう。ここでHadoopシングルトンパターンuasge

は、私が今のところ持っているものです。

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インスタンスの存在を強制しないように初期化メソッドとアクセサメソッドを分離しました。だから私は早くToolinitと呼んでから、get(このようなConfigurationManager.get().isSomethingEnabled()のような)を使って私のシングルトンにアクセスしようとしましたが、何らかの理由でnullが返されます。誰か、そのようなふるまいを説明してもらえますか? map/reducersは別のプロセスとして開始されるのでしょうか?

+0

:タスクを減らすごとに

あなたはそれを行うことができます。あなたの質問にハープープが関係するのはなぜですか? – shmosel

+0

@shmosel、不正確で申し訳ありません。一定。 Hadoopは私の質問に関連しています。なぜなら、このコードは独立した環境で動作しているからです(これをテストした)。私が記述した条件でそれを置くとすぐに私は働いていません。 –

+0

私はあなたを正しく理解していれば、あなたは 'get()'を呼び出す前に 'get(Configuration)'と呼んでいて、nullがあることに驚いています。どのようにイニシャライザが最初に実行されるのを確認しましたか? – shmosel

答えて

1

各縮小タスクは、異なるjvmで実行されます。それはnullを説明するでしょう。私は、ゼロ引数 `取得()`メソッドが表示されていないReducer - configure

関連する問題