文章目录
  1. 1. 思路
  2. 2. 分析

我们都知道core-site.xml是hadoop的核心配置文件,那这个文件是如何装载进去的呢?

我们一起分析一下这个装载配置过程

思路

如果我要分析配置加载过程,那么应该从配置使用着手,为什么?因为配置使用的时候已经加载好了,从而从NameNode入手。这样的逆向思维,顺藤摸瓜。

分析

1.我们从NameNode的main函数入手。

果然发现了 脚本启动 -> 进入namenode的main函数 -> new Configuration()

看一下构造函数。

  • 先执行static域,做了2件事,a.用weakHashMap建个缓存 b. 加载默认资源core-site.xml
  • 调用辅助重载构造器,传入true。这个true会让程序读取core-site.xml 后面可以看到。

进入添加资源方法,解释如下。调用reload。(reload自己看吧,里面就是清空properties)


问题来了,既然构造方法里,只做了清空、添加资源等 准备工作,那什么时候做加载工作?

有经验的同学应该明白一种设计叫 lazy ,即使用的时候再加载。这样可以减少系统开销。

那么获取属性我们都知道用 get方法,无二话,直接看get。果然有个getProps方法

深入loadResources方法。这里的 if 条件里就是true了,通过无参构造器调用重载构造器,进行的赋值。

看到dom4j,就真相大白了。

PS:还有另一种思路,简单粗暴效果好。凭经验,这种xml解析就是用dom4j的,全文搜索一下dom4j的类。从最底下向上打,不出5分钟就明白了。