`

第四章:小朱笔记hadoop之源码分析-conf分析

 
阅读更多

 

第三章:小朱笔记hadoop之conf分析 

一、Configurable

    void setConf(Configuration conf);
    //获取配置信息的方法:
    Configuration getConf();

 

二、Configured

实现了Configurable接口,也就是必须实现接口中的两个方法,当然并不是直接实现的,而是调用Configuration类来实现的,这里我们如果希望自己实现Configurable接口也是可以的。Configured类的方法比较简单,主要是通过调用Configuration类的方法来完成接口方法的。

 

三、 Configuration

Hadoop 中的组件是根据以上 API 进行配置的。一个 Configuration 实例包括一系列名值对形式的配置属性。每个属性是一个 String 类型,值类型可以任何 java 基础类型或 String 等其他类型。配置属性可以从以下方式加载:
(1)通过名值对设置
(2)通过其他的 Configuration 配置
(3)通过 URL 配置
(4)通过 Path 配置(将会从本地读取)
需要注意的是,当多次使用 addResource 时,后面的属性会覆盖以前设置的非 final 属性, final 属性是不可以被覆盖的。同时 Configuration 实现了 Writable 接口,是可序列化的。
下面重点讨论Configuration类,这个类实现了两个接口:Iterable 迭代接口、Writable 序列化接口

主要属性:
(1)static代码段首先获得了当前线程的类加载器然后找到资源hadoop-site.xml,如果找到了这个资源文件,就会log出一段提示信息: 因为找到了hadoop-site.xml这个文件,那么core-default.xml、hdfs-default.xml、mapred- default.xml的文件中的配置信息将会被core-site.xml、hdfs-site.xml、mapred-site.xml三个文件中的 配置所取代,从这段日志中也可以看出*-site的配置文件的优先级要高于*-default文件。
(2)defaultResources是个CopyOnWriteArrayList的连续数组,这个CopyOnWriteArrayList类会在io包中具体分析,这个数组的目的是存储配置文件的名字而不是配置文件的全路径,配置文件指的就是上文中提到的xml文件。
(3)finalParameters存储所有被声明为final的参数
(4)loadDefault是布尔类型的变量意思是是否加载默认的配置信息,也就是上文中提到的三个default.xml中的配置
(5)LOG是用apache的logging包中的日志方式记录日志
(6)int MAX_SUBST = 20 是设定对带有环境变量的值所能够深入解析的层次数,超出这个最大的层数的值将不能够解析
(7)overlay属性类型变量,记录了进行覆盖的属性
(8)properties存储的是Configuration对象中读取到的全部配置信息
(9)布尔值quietmode: 对应的是配置信息加载过程是否属于默认的模式,如果属于默认的模式下也就是快速模式,则在配置信息加载的过程中的一些信息不会记录在日志中,这个值的作用是影响log的输出,当然也会影响一些异常的抛出。
(10)REGISTRY是一个WeakHashMap的变量,key为Configuration,value为Object,可以看出这个对象存储了不同对象的多个配置信息,弱HashMap可以自动清除不在正常使用的键对应的条目,发现如果这个值不是null会重新加载默认的配置文件中的信息。
(11)resources列表中存放了包含配置信息的对象。
(12)varPat对含有环境变量的值的进行转换的正则表达式对象。

 

//Hadoop在创建配置类的时候,考虑了三种资源:
//
//URL资源(网络资源,指的是一个链接);
//
//CLASSPATH资源(String形式);
//
//Hadoop文件系统中的Path资源(该资源是基于Hadoop的FileSystem的,使用斜线“/”作为分隔符,如果是绝对路径,应该以“/”开始) 

public class Configuration implements Iterable<Map.Entry<String,String>>,
                                      Writable {
  //LOG是记录日志的对象
  private static final Log LOG = LogFactory.getLog(Configuration.class);

  //quietmode对应的是配置信息加载过程是否属于默认的模式,如果属于默认的模式下也就是快速模式,则在配置信息加载的过程中的一些信息不会记录在日志中
  private boolean quietmode = true;
  
  /**
   * List of configuration resources.
   * resources是一个对象组,用于存放有关包含配置信息的对象。
   */
  private ArrayList<Object> resources = new ArrayList<Object>();

  /**
   * List of configuration parameters marked <b>final</b>. 
   * 是所有配置值被声明为final变量的集合
   */
  private Set<String> finalParameters = new HashSet<String>();
  
  //是否加载默认配置
  private boolean loadDefaults = true;
  
  /**
   * Configuration objects
   * 用于多有个对象的相关配置的注册对它们进行管理,弱哈希可以自动清除不再正常使用的键对应的条目
   */
  private static final WeakHashMap<Configuration,Object> REGISTRY = 
    new WeakHashMap<Configuration,Object>();
  
  /**
   * List of default Resources. Resources are loaded in the order of the list 
   * entries
   * defaultResources用于存储默认的配置资源名或者路径
   */
  private static final CopyOnWriteArrayList<String> defaultResources =
    new CopyOnWriteArrayList<String>();
  
  /**
   * Flag to indicate if the storage of resource which updates a key needs 
   * to be stored for each key
   */
  private boolean storeResource;
  
  /**
   * Stores the mapping of key to the resource which modifies or loads 
   * the key most recently
   */
  private HashMap<String, String> updatingResource;
  
  //如果是老版本的hadoop则加载配置文件hadoop-site.xml不是老版本则加载配置文件core-default.xml,core-site.xml
  static{
    //print deprecation warning if hadoop-site.xml is found in classpath
    ClassLoader cL = Thread.currentThread().getContextClassLoader();
    if (cL == null) {
      cL = Configuration.class.getClassLoader();
    }
    if(cL.getResource("hadoop-site.xml")!=null) {
      LOG.warn("DEPRECATED: hadoop-site.xml found in the classpath. " +
          "Usage of hadoop-site.xml is deprecated. Instead use core-site.xml, "
          + "mapred-site.xml and hdfs-site.xml to override properties of " +
          "core-default.xml, mapred-default.xml and hdfs-default.xml " +
          "respectively");
    }
    addDefaultResource("core-default.xml");
    addDefaultResource("core-site.xml");
  }
  
  //properties存储的是Configuration对象中的全部配置信息,类型Properties是Java提供的对KV配置的一个属性集,提高了对KV配置参数的存储和操作方法
  private Properties properties;
  //overlay则是进行覆盖的属性
  private Properties overlay;
  //主要是用于配置冲根据配 置的参数构造相应的对象实例时提供上下文环境的类加载器
  private ClassLoader classLoader;
  {
    classLoader = Thread.currentThread().getContextClassLoader();
    if (classLoader == null) {
      classLoader = Configuration.class.getClassLoader();
    }
  }


.............


}

 

 

主要方法:
(1)初始化方法:
 


 
 
Configuration() :默认构造函数
Configuration(boolean loadDefaults):是否加载默认配置的构造函数
Configuration(Configuration other):通过克隆其他的配置对象配置来构造自己,这个构造函数主要克隆了resources、properties、overlay和 finalParameters四个对象,克隆的时候加了线程锁,确保在同一个jvm下的单线程执行,这个也很容易理解,为了保证配置的统一。

(2)增加资源的方法:
 

 
addResource(InputStream in):通过inputstream流来增加资源
addResource(Path file):通过制定的path文件加载资源
addResource(String name):通过资源名称来加载资源
addResource(URL url):通过资源的url来加载资源
上述四个方法的实现都调用了
addResourceObject(Object resource)这个方法,这个方法的设计巧妙之处在于参数是Object类型,充分体现了面向对象设计中的李氏替换的原则,把资源全部加入 resources变量后调用reloadConfiguration()方法重新加载配置信息。

(3)设置资源属性的方法:
 

 
set(String name, String value):设置指定参数的值,因为是加载后设置,所以除了要在设置properties中设置以外还需要在overlay中设置,表明之前的属性被覆盖掉了。
setBoolean(String name, boolean value):设置参数的布尔值
setBooleanIfUnset(String name, boolean value) :如果指定的属性没设置,则设置值为指定的布尔值
其他的set方法基本大同小异

(4)取得资源属性的方法:
 

 
这些方法很多与set方法相似,就是取得设置的资源属性的值,还有一些是取得Configuration对象中属性的值。

(5)其他方法:
Properties getProps():获得properties对象和overlay对象中的属性配置
reloadConfiguration():清除properties和finalParameters以便于重新加载配置信息
substituteVars(String):上面的正则表达式对象对含有环境变量的参数值进行解析的方法

  • 大小: 58.7 KB
  • 大小: 9.9 KB
  • 大小: 6.6 KB
  • 大小: 13 KB
  • 大小: 17.9 KB
分享到:
评论
1 楼 u011938035 2014-09-01  
谢谢。

相关推荐

    hadoop-lzo-0.4.21-SNAPSHOT jars

    3. `hadoop-lzo-0.4.21-SNAPSHOT-sources.jar`:这个文件包含了Hadoop-LZO的源代码,对于开发者来说非常有用,因为可以直接查看源码来理解其内部工作原理,也可以方便地进行二次开发或调试。 集成Hadoop-LZO到你的...

    hadoop-yarn-api-2.5.1-API文档-中文版.zip

    赠送jar包:hadoop-yarn-api-2.5.1.jar; 赠送原API文档:hadoop-yarn-api-2.5.1-javadoc.jar; 赠送源代码:hadoop-yarn-api-2.5.1-sources.jar; 赠送Maven依赖信息文件:hadoop-yarn-api-2.5.1.pom; 包含翻译后...

    parquet-hadoop-1.8.2-API文档-中文版.zip

    赠送jar包:parquet-hadoop-1.8.2.jar; 赠送原API文档:parquet-hadoop-1.8.2-javadoc.jar; 赠送源代码:parquet-hadoop-1.8.2-sources.jar; 赠送Maven依赖信息文件:parquet-hadoop-1.8.2.pom; 包含翻译后的API...

    hadoop-yarn-server-common-2.6.5-API文档-中文版.zip

    赠送jar包:hadoop-yarn-server-common-2.6.5.jar; 赠送原API文档:hadoop-yarn-server-common-2.6.5-javadoc.jar; 赠送源代码:hadoop-yarn-server-common-2.6.5-sources.jar; 赠送Maven依赖信息文件:hadoop-...

    flink-shaded-hadoop-2-uber-2.7.2-10.0.jar

    Flink1.10.1编译hadoop2.7.2 编译flink-shaded-hadoop-2-uber

    hadoop-eclipse-plugin-2.7.0.jar

    4. **日志查看**:插件集成了Hadoop作业的日志查看功能,开发者可以实时监控作业执行情况,定位并解决问题。 5. **调试功能**:这是一个非常重要的特性,用户可以设置断点,进行单步调试,查看变量值,从而有效地...

    hadoop插件apache-hadoop-3.1.0-winutils-master.zip

    4. **配置文件**:修改`conf/core-site.xml`和`conf/hdfs-site.xml`配置文件,定义HDFS的相关参数,如默认的文件系统、NameNode地址等。 5. **启动Hadoop服务**:通过`sbin`目录下的脚本启动Hadoop的各个服务,如`...

    hadoop-yarn-server-applicationhistoryservice-2.6.0-API文档-中文版.zip

    赠送jar包:hadoop-yarn-server-applicationhistoryservice-2.6.0.jar; 赠送原API文档:hadoop-yarn-server-applicationhistoryservice-2.6.0-javadoc.jar; 赠送源代码:hadoop-yarn-server-...

    hadoop-mapreduce-client-jobclient-2.7.3-API文档-中英对照版.zip

    赠送jar包:hadoop-mapreduce-client-jobclient-2.7.3.jar; 赠送原API文档:hadoop-mapreduce-client-jobclient-2.7.3-javadoc.jar; 赠送源代码:hadoop-mapreduce-client-jobclient-2.7.3-sources.jar; 赠送...

    Hadoop权威指南----读书笔记.pdf

    Hadoop权威指南----读书笔记

    hadoop-common-2.7.3-API文档-中文版.zip

    赠送jar包:hadoop-common-2.7.3.jar; 赠送原API文档:hadoop-common-2.7.3-javadoc.jar; 赠送源代码:hadoop-common-2.7.3-sources.jar; 赠送Maven依赖信息文件:hadoop-common-2.7.3.pom; 包含翻译后的API文档...

    hadoop-yarn-api-2.6.5-API文档-中文版.zip

    赠送jar包:hadoop-yarn-api-2.6.5.jar; 赠送原API文档:hadoop-yarn-api-2.6.5-javadoc.jar; 赠送源代码:hadoop-yarn-api-2.6.5-sources.jar; 赠送Maven依赖信息文件:hadoop-yarn-api-2.6.5.pom; 包含翻译后...

    hadoop最新版本3.1.1全量jar包

    hadoop-annotations-3.1.1.jar hadoop-common-3.1.1.jar hadoop-mapreduce-client-core-3.1.1.jar hadoop-yarn-api-3.1.1.jar hadoop-auth-3.1.1.jar hadoop-hdfs-3.1.1.jar hadoop-mapreduce-client-hs-3.1.1.jar ...

    hadoop-core-0.20.2 源码 hadoop-2.5.1-src.tar.gz 源码 hadoop 源码

    **Hadoop Core源码分析** Hadoop-core-0.20.2是Hadoop早期版本的核心组件,它包含了Hadoop的文件系统接口、分布式计算模型MapReduce以及其他的工具和库。在源码中,我们可以看到以下几个关键部分: 1. **HDFS接口*...

    hadoop-common-2.6.0-bin-master.zip

    4. 在编辑环境变量窗口中,点击“新建”,然后添加`C:\hadoop\hadoop-2.6.0\bin`(假设你解压到了这个位置)。 5. 确认更改后,需要重启命令提示符或计算机使更改生效。 **配置Hadoop** 安装完成后,还需要配置...

    hadoop-mapreduce-examples-2.6.5.jar

    hadoop-mapreduce-examples-2.6.5.jar 官方案例源码

    hadoop-eclipse-plugin-3.1.1.tar.gz

    Hadoop-Eclipse-Plugin-3.1.1是一款专为Eclipse集成开发环境设计的插件,用于方便地在Hadoop分布式文件系统(HDFS)上进行开发和调试MapReduce程序。这款插件是Hadoop生态系统的组成部分,它使得Java开发者能够更加...

    hadoop-3.3.1 windows + apache-hadoop-3.1.0-winutils-master.zip

    3. **配置Hadoop**:在Hadoop的conf目录下,编辑`core-site.xml`,设置HDFS的默认FS(如`fs.defaultFS`为`hdfs://localhost:9000`),以及临时目录(如`hadoop.tmp.dir`为`C:\Hadoop\tmp`)。然后编辑`hdfs-site.xml...

    hadoop常见问题及解决办法

    Hadoop是一个基于Apache的开源大数据处理框架,广泛应用于大数据处理、数据分析和机器学习等领域。然而,在使用Hadoop时,经常会遇到一些常见的问题,这些问题可能会导致Hadoop集群无法正常工作或者性能下降。因此,...

Global site tag (gtag.js) - Google Analytics