任何一个复杂的软件系统,为了提高其适应性和扩展性,一般都会有一个配置模块或者配置系统,作完成其扩展、定制的手段和方式。
1.1. Windows的配置文件
(第一次知道这事啊):
采用的是ini后缀的文本文件,可通过动态链接库提供方法进行处理。
初始化文件或profile概要文件
1.2. Java配置文件:
Properties文件
Xml文件
工具:Apache Commons Configuration 用于对配置文件进行常用的操作。
Hadoop configuration
Hadoop 使用Configuration类管理自己的配置文件
Hadoop配置文件的根元素是configuration,只包含子元素property,每一个property都是一个配置项,具有配置属性name,value,description 和final(意味着这个配置项是“固定不变的”,在合并资源的时候,可以防止配置项的值被覆盖)
每一个属性名都是String类型的,值的类型可以有多重,boolean(getBoolean) int(getInt) long (getLong) float (getFloat) String (get) File (getFile) String数组 (getStrings,其中值是以逗号进行分割的)
合并资源:
Configuration conf = new Configuration()
Conf.addResource(“core-default.xml”);
Conf.addResource(“core-site.xml”);
若配置项没有标记为final则后面的配置将覆盖前面的配置,如果有final,在进行覆盖时会有警告。
属性扩展:
Dfs.name.dir的值为$(hadoop.tmp.dir)/dfs/name,其中$(dfs.name.dir)就是conf中相应属性的值。
Configuration类的成员变量
quietmode为true时,默认值,在加载解析配置文件时 ,不输出日志信息。
数组resources保存了所有通过addResource添加的configuration对象的资源
boolean型的loadDefaults是否加载默认资源,默认资源保存在defaultResources中,通过addDefaultResource可以添加系统的默认资源。在HDFS中,将hdfs-default.xml和hdfs-site.xml作为默认资源,mr中,将mapred-default.xml和mapred-site.xml作为默认的资源。
如在hdfs的DataNode这个类(数据节点)中具有静态块
static{
Configuration.addDefaultResource(“hdfs-default.xml”);
Configuration.addDefaultResource(“hdfs-site.xml”);
}
properties有所有解析后的键值对
overlay记录的是应用通过set方法设置的配置项(覆盖或者不覆盖)
finalParameters,所有声明为final的配置项
通过类加载器,可以加载classpath路径下的资源,
URL classLoader.getResource(“name”);这些资源可以是任何类型。图片、图像,文件等,返回读取的URL对象
加载文件:通过延迟加载的方式,当真正需要数据的时候,才开始加载分析配置文件
xml解析形式:
sax:提供了一种流式的、事件驱动的xml处理方式,但编写处理逻辑比较复杂,适合处理大的xml文件
dom:不同,首先将文件加载入内存,形成一个树形结构,文档对象模型。hadoop的配置文件不是很大,因此采用dom处理xml(自行查找资料)
Configuration的loadResouce类(里面有加载的代码)。
public String get(name,defaultValue);可以得到任意的配置属性值
属性扩展:使用正则表达式:“\$\{[^\]\$ ]+\}”,对${}三个字符进行转义,同时[^]匹配除了里面的值以外的所有字符。+出现次数大于1
Configurable接口,实现了此接口,意味着这个类是可以进行配置的,即可以给他传入系统的conf实例。从而此类可以获取conf中对自己有用的配置信息。
setConf(Configuration)和getConf()
何时调用setConf呢,利用反射机制,可使用ReflectionUtils类中的setConf方法配置对象。if(obj instanceof Configrable)此类是否实现了Configurable接口
Hadoop技术内幕HDFS-笔记2,布布扣,bubuko.com