前言
Configuration是hadoop中五大组件的公用类,所以放在了core下,org.apache.hadoop.conf.Configruration。这个类是作业的配置信息类,任何作用的配置信息必须通过Configuration传递,因为通过Configuration可以实现在多个mapper和多个reducer任务之间共享信息。hadoop作为Apache旗下hadoop系列最早出现的组件,该组件的核心类Configuration对后续出现的hbase,have,spark的配置都有一定的借鉴意义。
概述
Configuration类最重要的作用是传递配置信息,所以其重要的属性应该是成员变量而非成员函数。
- resources 资源列表,用来存储配置文件名
- loadDefaults bool值,用来存储是否读取默认配置。默认是true
- REGISTRY hashmap,作用未知
- defaultResources 资源列表 默认的配置
- storeResource bool值 是否备份用户设置的配置信息到overlay
- updatingResource hashmap 本进程修改过的配置信息
- properties 最终的配置信息
- overlay 存放用户设置的配置信息(不包括配置文件的配置信息)
类初始化
我们按着类加载顺序和类实例化顺序来分析
1. 静态变量和静态代码块
静态代码块在defaultResources里添加了两个资源名:
addDefaultResource("core-default.xml");
addDefaultResource("core-site.xml");
public static synchronized void addDefaultResource(String name) {
if(!defaultResources.contains(name)) {
defaultResources.add(name);
for(Configuration conf : REGISTRY.keySet()) {
if(conf.loadDefaults) {
conf.reloadConfiguration();
}
}
}
}