Configuration类的使用(扩充中)
Hadoop中的组件是通过Hadoop自己的配置API来配置的。一个Configuration类的实例代表配置属性及其取值的一个集合。Configuration类可以在org.apache.hadoop.conf包中找到。
每个属性由一个String来命名,而值的类型可以是多种类型之一,包括Java基本类型(如boolean、int、long和float)、其他有用的类型(如String、Class和java.io.File)及String的集合。Configuration从资源(即使用简单结构定义的名值对的XML文件)中读取其属性值。
一个简单的配置文件configuration-1.xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property>
<name>color</name>
<value>yellow</value>
<description>Color</description>
</property>
<property>
<name>size</name>
<value>10</value>
<description>Size</description>
</property>
<property>
<name>weight</name>
<value>heavy</value>
<final>true</final>
<description>Weight</description>
</property>
<property>
<name>size-weight</name>
<value>${size},${weight}</value>
<description>Size and Weight</description>
</property>
</configuration>
configuration-2.xml:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property>
<name>color</name>
<value>black</value>
<description>Color</description>
</property>
<property>
<name>size</name>
<value>20</value>
<description>Size</description>
</property>
<property>
<name>weight</name>
<value>light</value>
<final>true</final>
<description>Weight</description>
</property>
<property>
<name>size-weight</name>
<value>${size},${weight}</value>
<description>Size and Weight</description>
</property>
</configuration>
下面的代码使用Configuration的一个实例加载这两个xml文件(按照顺序加载)。
/**
* addResource方法传入的参数可以是Path对象,引入具体的xml文件路径即可
*/
//config.addResource(new Path("/Users/mymac/Desktop/configuration-1.xml"));
/**
* configuration的addResource(String str)方法,传入的xml文件名称,应放在项目src目录下
*/
config.addResource("configuration-1.xml");
System.out.println(config.get("color"));
System.out.println(config.get("weight"));
System.out.println(config.get("size"));
// config.set("size", "14");
// config.set("weigth", "light");
// config.set("weight-size", "light-40");
// System.out.println(config.get("weight-size"));
/**
* xml文件按顺序加载,后加载的文件会覆盖之前文件对应属性值
* 除非xml文件当中<property></property>标签内
* 有<final></final>标签,标识了属性值不可改变
*/
config.addResource("configuration-2.xml");
System.out.println(config.get("color"));
System.out.println(config.get("weight"));
System.out.println(config.get("size"));
以上代码在控制台显示的内容如下:
从输出结果可以看出,xml文件按顺序加载,后加载的文件会覆盖之前文件对应属性值除非xml文件当中<property</property>标签内有<final>true</final>标签,标识了属性值不可改变。