配置系统是复杂软件必不可少的一部分,而Hadoop配置信息处理是学习Hadoop源代码的一个很好的起点。现在就从Hadoop的配置文件谈起。

一、Hadoop配置格式

Hadoop配置文件格式如下所示:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>io.sort.factor</name>
        <value>10</value>
        <description>The number of streams to merge at once while sorting files</description>
    </property>
</configuration>

  Hadoop的配置文件跟元素为configuration,一般只包含子元素property。每一个property元素就是一个配置项,配置文件不支持分层或分级,每个配置属性的名称name、值value和一个关于配置项的描述description;元素final和java关键字final类似,意味着这个配置项不可改变,而且在合并资源的时候可以防止配置项的值被覆盖。

  如果有两个配置文件,如core-default.xmlcore-site.xml.通过Configuration类(org.apache.hadoop.conf包中)的loadResource()方法,把他们合并成一配置文件。代码如下:

Configuration conf  = new Configuration();
conf.addResource(“core-default.xml”);
conf.addResource(“core-site.xml”);

  如果这两个配置文件都包含了相同的配置项,而且前一个资源的配置项没有标记为final,那么后一个配置将覆盖前一个配置。

    Hadoop的配置文件都是XML格式的,JAXP(Java API for XML Processing)是一种稳定、可靠的XML处理API,支持SAX(Simple API for XML)和DOM(Document Object Model)两种XML解析方式。

  SAX 提供提供了一种流式的、事件驱动的XML处理方式,但编写处理逻辑比较复杂,适合处理大的XML文件。

  DOM与SAX不同,它将XML文档一次性装入内存;然后根据文档中定义的元素和属性在内存中创建一个树形结构---文档对象模型,将文档对象化,文档中每个节点对应着模型中一个对象;然后使用对象提供的编程接口,访问XML文档,进而进行解析和操作XML文档,Hadoop的配置文件都是很小的文件,因此Configuration类使用DOM解析XML配置文件

二、Hadoop配置文件

  Hadoop的配置文件分为两类。

   第一类只读类型的默认文件:src/core/core-default.xml、src/hdfs/hdfs-default.xml、src/mapred-default.xml.

   第二类为定位设置(site-specific):conf/core-site.xmlconf/hdfs-site.xmlconf/mapred-site.xml

  也可以通过设置conf/Hadoop-env.sh来为Hadoop的守护进程设置环境变量(bin目录下)

  Hadoop是通过org.apache.hadoop.conf.configuration来读取配置文件的.在Hadoop的设置中,Hadoop的设置中,Hadoop的配置是通过资源(resource)定位的,每个资源由一系列的name/value键值对以XML文件的形式构成,它以一个字符串命名或以Hadoop定义的Path类命名(这个类用于定义问价系统内的文件或者文件夹的)。如果是以字符串命名的,Hadoop会通过classpath调用此文件。如果以Path命名,那么Hadoop会直接在本地文件系统中搜索文件。

  资源设定有两个特点。以下两点来自对Hadoop API文档的翻译和理解。

  (1)Hadoop允许定义最终参数(final parameters),如果任意资源声明了final这个值,那么之后加载的任何资源都不能改变这个值,定义最终资源的格式是这样的:

<property>
    <name>dfs.client.buffer.dir</name>
    <value>/tem/Hadoop/dfs/client</value>
    <final>true</final>
</property>

  (2)Hadoop允许参数传递。示例如下,当tempdir被调用时,basedir会作为值

/user/${user.name}”被调用。那么tempdir的值为user/${user.name}/temp,相应的${user.name}也会调用其它属性的值。

<property>
    <name>basedir</name>
    <value>/user/${user.name}</value>
</property>

<property>
    <name>tempdir</name>
    <value>${basedir}/temp</value>
</property>

 

  下面3个表详细说明了配置文件,hdfs-site.xml、core-site.xml、mapred-site.xml是Hadoop配置最重要的几个文件,在以后的Hadoop安装中会遇到。

参数parameter

值value

dfs.name.dir

NameNode存储名字空间及汇报日志的位置

dfs..data.dir

DataNode存储数据块的位置

conf/hdfs-site.xml配置表

参数parameter

值value

fs.default.name

NameNode的IP地址及端口

conf/core-site.xml配置表 

参数parameter

值value

mapreduce.jobtracker.address

JobTracker的IP地址及端口

mapreduce.jobtracker.system.dir

Mapreduce在HDFS上存储文件的位置,例如/Hadoop/mapred/system/

mapreduce.cluster.local.dir

Mapreducede 缓存数据存储在文件系统中的位置

mapred.tasktracker.{map|reduce}.task.maximun

每台TaskTracker所能运行的Map或Reduce的task最大值

dfs.hosts/dfs.hosts.exclude 

允许或禁止的Data

mapreduce.jobtracker.hosts.filename/

mapreduce.jobtracker.hosts.exclude.filename

允许或禁止的TaskTracker列表

mapreduce.cluster.job-authorization-enabled

布尔类型,表示Job存取控制列表是否支持对Job的观察和修改

conf/mapred-site.xml配置表

  除了规定的端口、IP地址、文件存储位置外,其他配置都是不允许修改的,以上配置被默认为最终参数,这些参数不可以在程序中再次修改。

  下一节将详细介绍Hadoop的安装。

 

   本文出处:http://www.cnblogs.com/bester/p/3279368.html 

posted on 2013-08-25 11:02  Bester  阅读(2033)  评论(2编辑  收藏  举报