1. 程式人生 > >《Hadoop技術內幕:深入解析Hadoop和HDFS》2.1配置檔案簡介

《Hadoop技術內幕:深入解析Hadoop和HDFS》2.1配置檔案簡介

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

個持久的屬性集,該集可儲存在流中或從流中載入。屬性列

表中每個鍵及其對應值都是字串型別。

圖 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等。

【1】大家想了解Hadoop知識可以,關注我下方評論轉發後,私信“資料”。

【2】部分資料有時間限制,抓緊時間吧!

感謝大家的支援!