コンフィギュレーションの概要

2191 ワード

以下の解析はHadoop-0.19.2に基づく
私たちはjobを書くときよくこのような文を書きます.
JobConf conf = new JobConf(***.class)

これはHadoopをロードする構成であることが明らかになった.プロセス全体が単純にプロファイルの読み取りにほかならないが、内部がどのように処理されているかを簡単に分析してみましょう.ジョブConfというクラスの継承関係を見てみましょう
public class JobConf extends Configuration {
    public JobConf(Class exampleClass) {
        setJarByClass(exampleClass);
  }
………
}

一般的に呼び出されるのは、上記のコンストラクタです.親コンストラクタのタイプが指定されていないため、new JobConfの場合、親のデフォルトコンストラクタが呼び出されます.では、コンフィギュレーションというクラスを見てみましょう.
public class Configuration implements Iterable<Map.Entry<String,String>>, Writable {
  private static final Log LOG = LogFactory.getLog(Configuration.class);

  // 
  private boolean quietmode = true;
  
  // 
  private ArrayList<Object> resources = new ArrayList<Object>();

  // 
  private Set<String> finalParameters = new HashSet<String>();

  //
  private Properties properties;
  private Properties overlay;
  private ClassLoader classLoader;
  {
    classLoader = Thread.currentThread().getContextClassLoader();
    if (classLoader == null) {
      classLoader = Configuration.class.getClassLoader();
    }
  }
  
  /** A new configuration. */
  public Configuration() {
    this(true);
  }

  /** A new configuration where the behavior of reading from the default 
   * resources can be turned off.
   * 
   * If the parameter {@code loadDefaults} is false, the new instance
   * will not load resources from the default files. 
   * @param loadDefaults specifies whether to load from the default files
   */
  public Configuration(boolean loadDefaults) {
    if (LOG.isDebugEnabled()) {
      LOG.debug(StringUtils.stringifyException(new IOException("config()")));
    }
    if (loadDefaults) {
      resources.add("hadoop-default.xml");
      resources.add("hadoop-site.xml");
    }
  }

一時停止...続行