深入理解hadoop(一)----Common的实现----Configuration
发布日期:2021-10-19 19:33:08 浏览次数:1 分类:技术文章

本文共 2659 字,大约阅读时间需要 8 分钟。

一,hadoop的配置管理

a,hadoop通过独有的Configuration处理配置信息

[java] 
  1. Configuration conf = new Configuration();  
  2. conf.addResource("core-default.xml");  
  3. conf.addResource("core-site.xml");  

后者会覆盖前者中 未 final标记的相同配置项

b,hadoop属性扩展

如果配置项 dfs.name.dir的值是 ${hadoop.tmp.dir} /dfs/name, hadoop.tmp.dir的值是 /data,

则结果为/data/dfs/name

c,Configuration 成员变量分析

[java] 
  1. //如果为true,加载配置文件的过程中,不输出日志信息  
  2. boolean quietmode;      
  3. //保存通过addResources()方法添加的资源  
  4. ArrayList<Object> resources;     
  5. //保存配置文件中已经被声明为final的键-值对  
  6. Set<String> finalParameters;    
  7. //是否加载默认资源  
  8. boolean loadDefaults ;    
  9. // 保存默认资源 列如HDFS 中 把hdfs-default.xml和 hdfs-site.xml作为默认资源  
  10. static ArrayList<String> defaultResources ;     
  11. //保存 hadoop配置文件解析后的键-值对  
  12. Properties properties ;      
  13. //记录通过set()方式改变的配置项  
  14. Properties overlay ;            
  15. //类变量加载器,通过它来加载指定类  
  16. ClassLoader classLoader ;   

[java] 
  1. public URL getResource(String name){  
  2.    return classLoader.getResource(name);  
  3. }   

[java] 
  1. //如果为true,加载配置文件的过程中,不输出日志信息  
  2.     boolean quietmode;      
  3.     //保存通过addResources()方法添加的资源  
  4.     ArrayList<Object> resources;     
  5.     //保存配置文件中已经被声明为final的键-值对  
  6.     Set<String> finalParameters;    
  7.     //是否加载默认资源  
  8.     boolean loadDefaults ;    
  9.     // 保存默认资源 列如HDFS 中 把hdfs-default.xml和 hdfs-site.xml作为默认资源  
  10.     static ArrayList<String> defaultResources ;     
  11.     //保存 hadoop配置文件解析后的键-值对  
  12.     Properties properties ;      
  13.     //记录通过set()方式改变的配置项  
  14.     Properties overlay ;            
  15.     //类变量加载器,通过它来加载指定类  
  16.     ClassLoader classLoader ;   
  17.       
  18.       
  19.     /** 
  20.      * 资源通过addResource()方法或者静态addDefaultResource()方法添加到Configuration中,添加的资源并不会立即被加载 
  21.      * 只是通过reloadConfiguration()方法清空properties 和finalParameters代码如下 
  22.      */  
  23.     public void addResource(String name){  
  24.         addResourceObject(name);  
  25.     }  
  26.   
  27.     private synchronized void addResourceObject(Object resource) {  
  28.         //添加到成员变量resources中  
  29.         resources.add(resource);  
  30.         reloadConfiguration();  
  31.     }  
  32.   
  33.     private synchronized void reloadConfiguration() {  
  34.         properties = null;  
  35.         finalParameters.clear();  
  36.     }  

[java] 
  1. /** 
  2.  * 实际载入资源 
  3.  */  
  4. private synchronized Properties getProps(){  
  5.     if(properties==null){  
  6.         properties = new Properties();  
  7.         loadResources(properties,resources,quietmode);  
  8.     }  
  9.       
  10.     return properties;  
  11. }  
  12.   
  13. private void loadResources(Properties properties,  
  14.         Object name, boolean quietmode) {  
  15.     try{  
  16.         //得到用于创建DOM解析器的工厂  
  17.         DocumentBuilderFactory documentBuilderFactory =   
  18.             DocumentBuilderFactory.newInstance();  
  19.           
  20.         //忽略XML注释  
  21.         documentBuilderFactory.setIgnoringComments(true);  
  22.           
  23.         //提供对XML名称空间的支持  
  24.         documentBuilderFactory.setNamespaceAware(true);  
  25.           
  26.         try{  
  27.             //允许XInclude机制  
  28.             documentBuilderFactory.setXIncludeAware(true);  
  29.         }catch (Exception e) {  
  30.               
  31.         }  
  32.           
  33.         //获取解析XML的DocumentBuilder对象  
  34.         DocumentBuilder builder =   
  35.             documentBuilderFactory.newDocumentBuilder();  
  36.           
  37.         Document doc = null;  
  38.         Element root = null;  
  39.           
  40.         //根据不同的资源,做不同的处理  
  41.           
  42.         if(name instanceof URL){  
  43.               
  44.         }else if(name instanceof InputStream){  
  45.               
  46.         }else if(name instanceof Element){  
  47.             root = (Element) name;  
  48.         }  
  49.     }catch (Exception e) {  
  50.         // TODO: handle exception  
  51.     }     
  52.       
  53. }  

转载地址:https://blog.csdn.net/u013494310/article/details/19480027 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:nio-选择器
下一篇:有用的十大算法

发表评论

最新留言

很好
[***.229.124.182]2024年04月06日 20时01分41秒