首页 > 代码库 > Hadoop技术内幕HDFS-笔记2

Hadoop技术内幕HDFS-笔记2

任何一个复杂的软件系统,为了提高其适应性和扩展性,一般都会有一个配置模块或者配置系统,作完成其扩展、定制的手段和方式。

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接口