Hadoop的源码实在庞大, 第一部分先分析Configuration。
Hadoop系统中的一个configuration,可以看做是一堆key-value对,保存在Configuration的properties属性中,而这些properties来源于 Resources,一个Resource可以是一个xml文件,可以是另一个Configuration,等等。Configuration会默认加载 core-default.xml和core-site.xml两个Resource。Configuration可以调用AddResource方法动 态加载Resource,加载后,会触发Hadoop系统中所有configuration的property重构。
为了知道Hadoop系统中有哪些Configuration, Configuration类中就由一个static 的 REGISTRY, 是一个WeakHashMap,但Value没有用到,保存了所有存在的Configuration。
WeakHashMap是一个比较有趣的东西。
HashMap当put(key,value)时,会给key加一个reference,当这个key在其他地方都被删除了,如果HashMap没有删除这个key, gc时是不会回收这个key的。
但WeakHashMap put (key, value)时,不会给key加一个reference, 当这个key在其他地方被删除后,gc之后,WeakHashMap会自动删除这个key, 所以,WeakHashMap非常适合管理资源,当资源被删除后,WeakHashMap也会自动删除这个key:
1. 新建WeakHa