org.apache.hadoop.conf.Configuration源码解析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_25551085/article/details/80037586

提供对配置文件参数的访问

一, Resource

配置被资源指定,一个Resource包含一些键值对的集合。资源以一个String命名或者是一个Path(link):
- 如果resource的name是String,则classpath下必须有名为name的文件
- 如果resource以Path命名,然后直接检查本地文件系统,而不是引用类路径。

除非显示的关闭,否则hadoop默认指定加载两个资源,在classpath下按顺序加载:
- ../hadoop-project-dist/hadoop-common/core-default.xml:默认是只读的
- core-site.xml : 对于一个给定hadoop 安装节点的指定配置。

应用程序可以添加额外的资源,这些资源按照添加的顺序加载到这些资源的后面。

二, Final Parameters(不可变参数)

配置参数可以被声明为final,一旦一个资源声明一个值为final,没有随后加载的资源可以改变它:

 <property>
    <name>dfs.hosts.include</name>
    <value>/etc/hadoop/conf/hosts.include</value>
    <final>true</final>
  </property>

管理员通常在core-site.xml中定义不可变参数,为那些用户的应用程序提供不可变的值。

三, Variable Expansion(变量扩展)

字符串值被首先处理,用于变量扩展。可用的属性是:

  1. 如果一个name在这里还没有定义,其他的属性定义在这个Configuration中
  2. 如果一个变量name以“env.”开头,则是在System.getenv()的环境变量中
  3. 否则,或者是在System.getProperties()中的属性。

举个例子:

  <property>
    <name>basedir</name>
    <value>/user/${user.name}</value>
  </property>

  <property>
    <name>tempdir</name>
    <value>${basedir}/tmp</value>
  </property>

  <property>
    <name>otherdir</name>
    <value>${env.BASE_DIR}/other</value>
  </property>
  1. 当conf.get(“tempdir”)被调用的时候,这个${basedir} 将会被解析为在这个配置中另一个属性,当${user.name}通常会解析为系统属性中对应name的值。
  2. 当conf.get(“otherdir”)被调用的时候,这个${env.BASE_DIR}将会被解析为环境变量${BASE_DIR}的值。
    • 它支持:- ${env.NAME:-default} 和 ${env.NEME-default}
    • 前者被解析为default值,如果${NAME}环境变量没定义,或者定义的值为空。
    • 或者也是相同和解析方式。
  3. 默认,对于任何过时的配置参数都会有警告,它们可以通过log4j.properties文件中的“log4j.logger.org.apache.hadoop.conf.Configuration.deprecation”来改变警告的输出。

四, java.lang.System.getenv()

Map<String, String> java.lang.System.getenv()
  1. 此方法返回当前系统环境中的不可更改的String Map。
  2. 这个环境是一个依赖系统的一个名字到值的映射,它从父进程传递到子进程。
  3. 如果系统不支持环境变量,则返回空map。
  4. 返回的map不会包含空键或值。如果检查出存在空key或空value,则会抛出NPE.如果存的值不是String,则抛出类转化异常。
  5. 返回的返回的map和他的集合可能不服从对象的一般契约:两个对象equal,则hashCode必须一样。
  6. 在各个平台上,map通常是大小写敏感的

猜你喜欢

转载自blog.csdn.net/sinat_25551085/article/details/80037586
今日推荐