analysis hadoop load configuration
更新日期:
我们都知道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分钟就明白了。