您好,欢迎访问一九零五行业门户网

第二部分 Common的实现 第2章 Hadoop配置信息处理 2.1 配置文

《hadoop技术内幕:深入解析hadoop common和hdfs架构设计与实现原理》第2章hadoop配置信息处理,本章从windows和基于java properties配置文件开始,分析了hadoop使用的基于健–对构成的、结构相对简单的xml配置文件,以及相应的处理类configuration,特别是c
《hadoop技术内幕:深入解析hadoop common和hdfs架构设计与实现原理》第2章hadoop配置信息处理,本章从windows和基于java properties配置文件开始,分析了hadoop使用的基于健–值对构成的、结构相对简单的xml配置文件,以及相应的处理类configuration,特别是configuration类中的资源加载、资源合并和属性扩展等比较重要的处理过程。本节为配置文件简介。
第二部分 common的实现
本部分内容
hadoop配置信息处理
序列化与压缩
hadoop远程过程调用
hadoop文件系统
第2章 hadoop配置信息处理
任何一个复杂的软件系统,为了提高其适应性和扩展性,一般都会有一个配置模块或配置系统,作为其扩展、定制的手段和方式。hadoop使用配置文件将系统中的重要属性以文件的形式进行持久化,使得这些属性可以被重启后的进程或者不同的进程使用。
2.1 配置文件简介
配置文件是一个灵活系统不可缺少的一部分,虽然配置文件非常重要,但却没有标准。本节我们来了解windows操作系统和java环境中的配置文件。
2.1.1 windows操作系统的配置文件
windows系统广泛使用一种特殊化的ascii文件(以“ini”为文件扩展名)作为它的主要配置文件标准。下面是ini文件的片段:
;最后修改时间:2012.10.12  [owner]  name=john doe  organization=acme widgets inc.   [database]  server=192.0.2.62 ;使用ip地址,在域名解析不能使用时还能正常工作  port=143 file=payroll.dat  [ftp]  
该文件也称为初始化文件(initialization file,它的扩展名就是initialization的前三个字母)或概要文件(profile),应用程序可以拥有自己的配置文件,存储应用的设置信息,也可以访问windows的基本系统配置文件win.ini中存储的配置信息。ini文件将配置信息分为“节”,节标题放在方括号中。如上面例子中的[database],就是database节的节标题。节用于对配置数据做一个归类,每一个节可以包含一些与之相关的“项”(entry),并通过等号对其进行赋值(value)。一般的形式如下:
[div]  entry=value 
其中value值可以有两种类型:数型或字符串。上面给出的ini文件片段中,database节中包含3个项,分别是server、port和file。其中,配置项port可以以数型的形式读取。
ini文件中的注释以分号开始,到行尾结束。
windows操作系统同时还提供了一些api,用来对配置文件进行读、写。如使用getprofilestring()函数可以从配置文件win.ini中获取字符串型配置,使用getprivateprofileint()函数可以从私有的配置文件中读取一个配置整数型项。该函数的原型如下:
uint winapi getprivateprofileint(     __in  lpctstr lpappname,     __in  lpctstr lpkeyname,     __in  int ndefault,     __in  lpctstr lpfilename  ); 
其中,参数lpctstr lpfilename是ini文件的文件名,lpctstr lpappname和lpctstr lpkeyname分别是上述的“节”和“项”,int ndefault是默认值,也就是说,如果在配置文件中找不到配置信息,就返回该默认值。
2.1.2 java配置文件
jdk提供了java.util.properties类,用于处理简单的配置文件。properties很早就被引入到java的类库中,并且一直没有什么变化。它继承自hashtable,如图2-1所示,表示了一个持久的属性集,该集可保存在流中或从流中加载。属性列表中每个键及其对应值都是字符串类型。
相对于ini文件,properties处理的配置文件格式非常简单,它只支持键–值对,等号“=”左边为键,右边为值。形式如下:
entry=value 
由于properties基于hashtable,它并不能支持ini文件中的“节”,对配置项进行分类。
java.util.properties中用于处理属性列表的主要方法如下,其中,getproperty()用于在属性列表中获取指定键(参数key)对应的属性,它有两个形式,一个不提供默认值,另一个可以提供默认值。properties.setproperty()用于在属性列表中设置/更新属性值。相关代码如下:
//用指定的键在此属性列表中搜索属性  public string getproperty(string key)   //功能同上,参数defaultvalue提供了默认值  public string getproperty(string key, string defaultvalue)   //最终调用 hashtable 的方法put  public synchronized object setproperty(string key, string value)  
properties中的属性通过load()方法加载,该方法从输入流中读取键–值对,而store()方法则将properties表中的属性列表写入输出流。使用输入流和输出流,properties对象不但可以保存在文件中,而且还可以保存在其他支持流的系统中,如web服务器。j2se 1.5版本以后,properties中的数据也可以以xml格式保存,对应的加载和写出方法是loadfromxml()和storetoxml()。
下面是以xml格式存在的properties配置文件的例子。
xml?version=1.0?encoding=utf-8?> properties?system        http://java.sun.com/dtd/properties.dtd> properties>    comment>hicomment>    entry?key=foo>barentry>    entry?key=fu>bazentry> properties> 
由于java.util.properties提供的能力有限,java社区中出现了大量的配置信息读/写方案,其中比较有名的是apache jakarta commons工具集中提供的commons configuration。commons configuration中的propertiesconfiguration类提供了丰富的访问配置参数的方法。commons configuration支持文本、xml配置文件格式;支持加载多个配置文件;支持分层或多级的配置;同时提供对单值或多值配置参数的基于类型的访问。应该说,commons configuration是一个功能强大的配置文件处理工具。
其它类似信息

推荐信息