继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

《Hadoop技术内幕:深入解析Hadoop和HDFS》2.1配置文件简介

慕神8447489
关注TA
已关注
手记 1273
粉丝 174
获赞 956

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)。一般的形式如下:

[SECTION]

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 所示,表示了一

个持久的属性集,该集可保存在流中或从流中加载。属性列

表中每个键及其对应值都是字符串类型。

webp

图 2-1 Properties 的继承关系

相对于 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"?>

<!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>

由于 java.util.Properties 提供的能力有限,Java 社区中出现了大量的配置信息读 / 写方

案,其中比较有名的是 Apache Jakarta Commons 工具集中提供的 Commons Configuration。

Commons Configuration 中的 PropertiesConfiguration 类提供了丰富的访问配置参数的方法。

Commons Configuration 支持文本、XML 配置文件格式 ;支持加载多个配置文件 ;支持分

层或多级的配置 ;同时提供对单值或多值配置参数的基于类型的访问。应该说,Commons

Configuration 是一个功能强大的配置文件处理工具。

这是给大家做的一个《Hadoop技术内幕:深入解析Hadoop和HDFS》的分享,这本书是由我们的蔡斌和陈湘萍著作,大家想学Hadoop的可以在网上找这本书。

后续还会给大家上,敬请期待。

Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。 Hadoop也是后面其他技术的基础,学好了Hadoop才能更好地学好hive,hbase,spark,storm等。



作者:爱我的程序人生
链接:https://www.jianshu.com/p/d985a859aadb


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP