hadoop源码研读之路(二)----配置类

Configuration是org.apache.hadoop.conf包中的主类

Configuration类中包含了10个属性

private static final Log LOG = LogFactory.getLog(Configuration.class);

LOG是记录日志的对象


private boolean quietmode = ture;

quietmode对应的是配置信息加载过程是否属于默认的模式,如果属于默认的模式下也就是快速模式,则在配置信息加载的过程中的一些信息不会记录在日志中。


private ArrayList<Object> resources = new ArrayList<Object>();

resources是一个对象组,用于存放有关包含配置信息的对象。


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

finalParameters 是所有配置值被声明为final变量的集合


private boolean loadDefaults = true;

loadDefaults是否加载默认配置


private static final WeakHashMap<Configuration,Object> REGISTRY =  new WeakHashMap<Configuration,Object>();

REGISTRY是一个WeakHashMap,用于多有个对象的相关配置的注册对它们进行管理,弱哈希可以自动清除不再正常使用的键对应的条目


private static final CopyOnWriteArrayList<String> defaultResources = new CopyOnWriteArrayList<String>();

defaultResources用于存储默认的配置资源名或者路径.


private Properties properties;

properties存储的是Configuration对象中的全部配置信息,类型Properties是Java提供的对KV配置的一个属性集,提高了对KV配置参数的存储和操作方法


private Properties overlay;

overlay则是进行覆盖的属性


private ClassLoader classLoader;

classLoader主要是用于配置冲根据配 置的参数构造相应的对象实例时提供上下文环境的类加载器


private static Pattern varPat = Pattern.compile("\\$\\{[^\\}\\$\u0020]+\\}");

arPat是一个对含有环境变量的值的进行转换的正则表达式对象,比如我们设定的一个路径变量 的值为$HOME/data,那么这个变量就会以一定的规则把该变量的值分为字串$HOME和/data,之后会把$HOME解析成系统上的家目录了


private static int MAX_SUBST = 20;

MAX_SUBST是设定对带有环境变量的值所能够深入解析的层次数,超出这个最大的层数的值将不能够解析


然后调用Configuration.main(null)方法执行过程如下

先执行

static{...}主要加载配置文件,addResource()方法为Configuration添加资源

如果是老版本的hadoop则加载配置文件hadoop-site.xml不是老版本则加载配置文件core-default.xml,core-site.xml

然后执行{....},用于加载默认的配置资源

它的主要机制是通过getPros()调用 loadResources(Properties,ArrayList,boolean)方法再调用 loadResource(Properties,Object,boolean)加载配置资源中的配置信息,

主要方法如下:

substituteVars(String)方法就是配合上面的正则表达式对象对含有环境变量的参数值进行解析的方法。

后面的set和get方法主要是获取各种参数值的方法,

而set(String,String)和get(String)的方法中会调用getPros()方法获取当前Configuration对象的properties对象,如果该对象为空,则调用loadResources(Properties,ArrayList,boolean)方法加载配置信息,之后的其他get和set方法都是通过调 用get(String)和set (String,String)方法来实现对配置信息的操作的。

最后几个方法分别是size()方法是获取配置信息大小的,

clear()方法是用于清除配置信息的,

IntegerRanges是一个关于整型数范围的内部类

iterator()是配置对象的一个迭代器,

readFields(DataInput)方法和write(DataOutput)方法则是因为Configuration类实现了Writable 接口的实现方法,这样Configuration类就可以在集群中进行分发,使得同一个作业的所有节点上的配置信息都完全相同。

reloadConfiguration()则是一个清除所有原有配置信息,以便于重新加载配置信息的方法,这可以在值的覆盖中或者用新的配置资源覆盖之前的配置资源的时候用到。

Hadoop在创建配置类的时候,考虑了三种资源:

URL资源(网络资源,指的是一个链接);

CLASSPATH资源(String形式);

Hadoop文件系统中的Path资源(该资源是基于Hadoop的FileSystem的,使用斜线“/”作为分隔符,如果是绝对路径,应该以“/”开始)


你可能感兴趣的:(hadoop,String,ClassLoader,properties,正则表达式,resources)