Hadoop源码分析(二)
2021/10/17 11:40:09
本文主要是介绍Hadoop源码分析(二),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1.Hadoop配置信息处理
1.1 Windows 操作系统的配置文件
Windows 系统广泛使用一种特殊化的 ASCII 文件(以“ini”为文件扩展名)作为它的主要配置文件标准。INI文件被称为初始化文件(Initialization File)或概要文件(profile)。应用程序可以拥有自己的配置文件,存储应用的设置信息,也可以访问 Windows 的基本系统配置文件 win.ini 中存储的配置信息。INI 文件将配置信息分为“节”,节标题放在方括号中。
下面是一段INI文件的示例:
[owner] name=John Doe organization=Acme Widgets Inc. [database] server=192.0.2.62 ; //使用 IP 地址,在域名解析不能使用时还能正常工作 port=143 file="payroll.dat"
如上面例子中的 [database],就是 database 节的节标题。"节"用于对配置数据做一个归类,每一个节可以包含一些与之相关的“项”(ENTRY),并通过等号对其进行赋值(VALUE)。
其中一般形式为:
[SECTION] ENTRY=VALUE
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 是默认值,也就是说,如
果在配置文件中找不到配置信息,就返回该默认值。
1.2 Java配置文件
JDK 提供了 java.util.Properties 类,用于处理简单的配置文件,相对于 INI 文件,Properties 处理的配置文件格式非常简单,它只支持键 – 值对,“=”左边为键,右边为值。形式如下:
ENTRY=VALUE
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 中的数据也可以以 XML 格式保存,对应的加载和写出方法是loadFromXML() 和 storeToXML()。
下面是以 XML 格式存在的 Properties 配置文件的例子。
<?xml?version="1.0"?encoding="UTF-8"?> <!DOCTYPE?properties?SYSTEM "http://java.sun.com/dtd/properties.dtd"> <properties> <comment>Hi</comment> <entry?key="foo">bar</entry> <entry?key="fu">baz</entry> </properties>
2.Hadoop Configuration
Hadoop 配 置 文 件 的 根 元 素 是 configuration, 一 般 只 包 含 子 元 素 property。 每 一 个
property 元素就是一个配置项,配置文件不支持分层或分级。每个配置项一般包括配置属性
的名称 name、值 value 和一个关于配置项的描述 description ;元素 final 和 Java 中的关键字
final 类似,意味着这个配置项是“固定不变的”。final 一般不出现,但在合并资源的时候,
可以防止配置项的值被覆盖。
Hadoop 配置文件采用 XML 格式,下面是 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. This determines the number of open file handles.</description> </property> <property> <name>dfs.name.dir</name> <value>${hadoop.tmp.dir}/dfs/name</value> <description>Determines where on the local filesystem the DFS name nodeshould store the name table(fsimage). ……</description> </property> <property> <name>dfs.web.ugi</name> <value>webuser,webgroup</value> <final>true</final> <description>The user account used by the web interface. Syntax: USERNAME,GROUP1,GROUP2, ……</description> </property> </configuration>
在上面的示例文件中,配置项 dfs.web.ugi 的值是“webuser,webgroup”,它是一个 final
配置项 ;从 description 看,这个配置项配置了 Hadoop Web 界面的用户账号,包括用户名和
用户组信息。这些信息可以通过 Configuration 类提供的方法访问。
在上述代码中,getInt("io.sort.factor") 将返回整数 10 ;而 getStrings("dfs.web.ugi")
返回一个字符串数组,该数组有两个元素,分别是 webuser 和 webgroup。
在 Configuration 中,每个属性都是 String 类型的。
使 用 Configuration 类 的 一 般 过 程 是 : 构 造 Configuration 对 象, 并 通 过 类 的
addResource() 方法添加需要加载的资源 ;然后就可以使用 get* 方法和 set* 方法访问 / 设置
配置项,资源会在第一次使用的时候自动加载到对象中。
本次代码分析主要是从Hadoop的配置信息处理和配置文件展开的,经过了这次分析,也是我进一步了解了hadoop源码的构成.
这篇关于Hadoop源码分析(二)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2023-05-13Windows下hadoop环境搭建之NameNode启动报错
- 2023-04-14hadoop伪分布式集群的安装(不是单机版)
- 2022-12-05Hadoop生态系统—数据仓库Hive的安装
- 2022-11-02Win10搭建Hadoop环境
- 2022-10-19Hadoop生态系统(数据仓库Hive的安装)
- 2022-10-03Hadoop、storm和Spark Streaming简单介绍
- 2022-10-03胖虎的Hadoop笔记——Hadoop的伪分布式部署
- 2022-09-11Ubuntu搭建全分布式Hadoop
- 2022-09-11Ubuntu搭建全分布式Hadoop
- 2022-09-09Ubuntu下安装伪分布式HADOOP遇到的一些问题