提供接口和方法让我们访问hadoop配置参数。
public class Configuration implements Iterable<Map.Entry<String,String>>, Writeable{
// 创建Configuration对象,并且加载默认资源, core-default.xml和core-site.xml
public Configuration();
// 创建Configuration对象,通过loadDefaults控制是否加载默认配置资源
public Configuration(boolean loadDefaults);
// 拷贝构造函数,两个Configuration拥有完全相同的配置参数
public Configuration(Configuration other);
// 添加默认配置资源,资源必须要在classpath下面
public static synchronized void addDefaultResource(String name);
// 添加配置资源,资源必须在classpath下面
public void addResource(String name);
// 添加配置资源,会在本地文件系统下查找资源
public void addResource(URL url);
// 添加配置资源,会在本地文件系统下查找资源
public void addResource(Path file);
}
Resource
Configuration由各种配置资源指定。资源也就是包含一组name/value对的xml格式的数据。如上Configuration的代码可以看到,可以通过String, Path, URL指定一个资源。如果通过String指定一个资源,那么表示classpath下面的一个文件。如果通过Path/URL指定一个资源,那么表示local filesystem下面的一个文件。
Default Configuration Resource
除非显示的把加载默认配置资源的选项关闭,否则当我们在新建Configuration对象时会加载默认的配置资源。目前,默认配置资源包括core-default.xml和core-site.xml, 我们可以通过Configuration.addDefaultResource添加额外的默认配置资源,或者在Configuration对象创建好之后添加其它的配置资源。需要注意的是默认配置资源必须要在classpath下面。
Resource Load Order
资源加载顺序和资源添加顺序完全相同
Configuration Property/Parameters
通过下面这段代码来定义一个配置参数。
<property>
<name>dfs.hosts.include</name>
<value>/etc/hadoop/conf/hosts.include</value>
<final>true</final>
</property>
如果想要查看某个配置参数的含义和默认值,可以参考hadoop 官方文档所提供的下面几个配置文件。
core-default.xml
hdfs-default.xml
mapred-default.xml
yarn-default.xml
Deprecated Properties
Final Parameters
我们可以在一个配置文件里把一个配置参数定义成final的,防止后续添加的配置文件或者用户应用程序对这个参数进行修改。
<property>
<name>dfs.hosts.include</name>
<value>/etc/hadoop/conf/hosts.include</value>
<final>true</final>
</property>
Variable Expansions
我们在定义一个Property的value的时候,可以利用其它属性的值,下面是一个例子:
<property>
<name>basedir</name>
<value>/user/${user.name}</value>
</property>
<property>
<name>tempdir</name>
<value>${basedir}/tmp</value>
</property>
使用其它属性的语法规则是${property_name}
可以使用的属性包括两类:
- Configuration里面包括的其它属性${basedir}
- System.getProperty()里面包括的系统属性,例如${user.name}