Common介紹

Common簡介

從Hadoop 0.20版本開始,原來Hadoop項目的Core部分更名爲Hadoop Common。Common爲Hadoop的其他項目提供一些常用工具,主要包括系統配置工具Configuration、遠程過程調用RPC、序列化機制和Hadoop抽象文件系統FileSystem等。


配置信息處理

一般的軟件都會有一個配置模塊,來作爲擴展、定製的手段和方式。Hadoop使用配置文件將系統中的重要屬性以文件的形式進行持久化,使得這些屬性可以被重啓後的進程或者不同的進程使用。配置文件非常重要,但卻沒有標準。

1 Windows配置文件

Windows使用一種特殊化的ASCII文件,以.ini爲文件擴展名,該文件也稱爲初始化文件(Initialization File)。

INI文件中配置信息分爲“節”,用於對配置數據做一個歸類,每一個節可以包含一些與之相關的“項“,格式如下:

[SECTION]
  ENTRY=VALUE    ;其中VALUE可以有兩種類型:數型或字符串。

最後系統會提供一些API來對配置文件進行讀、寫。

2 Java環境配置文件

JDK提供了java.util.Properties類,繼承自Hashtable,所以不支持“節”,就是簡單的健-值對。

3 Hadoop配置文件

Hadoop使用了一套獨有的配置文件管理系統,用org.apache.hadoop.conf.Configuration來處理配置信息,並提供自己的API。Hadoop配置文件採用XML格式。

<configuration>
        <property>//配置文件不支持分層或分級,每個property就是一個配置項。
                <name></name>
                <value></value>
                <description></description>
        </property>
</configuration>


重點:Configuration類中的資源加載、資源合併和屬性擴展等處理過程。

3.1 資源加載,通過對象的addResource()方法添加到Configuration對象中,添加的資源並不會立即被加載,只是清空成員變量properties(Hadoop配置文件解析後的健-值對都存放在JDK中的properties中)和finalParameters(保存聲明爲final的健-值對的健)。

properties中的數據,直到需要的時候纔會被加載進來,採用了延遲加載的設計模式。

SAX(Sinple API for XML)提供一種流式的、事件驅動的XML處理方式,但編寫處理邏輯比較複雜,適合處理大XML文件。

DOM(Document object Model)先將XML文檔裝入內存,然後根據文檔中定義的元素和屬性在內存中創建一個“樹形結構”,也就是一個文檔對象模型,將文檔對象化,文檔中每個節點對應着模型中一個對象;然後使用對象提供的編程接口,訪問XML文檔進而操作XML文檔。Hadoop的配置文件都是小文件,因此Configuration使用DOM方式處理XML。


3.2 資源合併,多次調用Configuration.addResource()將多個配置文件合併成一個。如果兩個配置資源包含有相同的配置項,而且前一個資源的配置項沒有標記爲final,那後面的配置項將覆蓋前面的配置項。

使用get*和set*訪問/設置配置項

get*一共有21個方法,最重要的是get()方法,它根據配置項的健獲取對應的值,如果健不存在,則返回默認值。其他的方法都依賴Configuration.get(),並在此基礎上做進一步處理。Configuration.get()會調用Configuration的私有方法substituteVars(),該方法通過正則表達式完成配置項的屬性擴展(屬性擴展最多隻能進行20次,避免擴展出現死循環)。

set*對輸入進行類型轉換等處理後,最終調用Configuration.set(),保存傳入的健-值對。


3.3 屬性擴展Configuration.get()會調用Configuration的私有方法substituteVars(),該方法通過正則表達式完成配置項的屬性擴展。如配置項dfs.name.dir的值是${hadoop.tmp.dir}/dfs/name,其中${hadoop.tmp.dir}會使用Configuration中的相應屬性值進行擴展。

Configurable(可配置的)接口,如果一個類實現了Configurable接口,意味着這個類是可配置的。也就是說,可以通過爲這個類的對象傳入一個Configuration實例,提供對象工作需要的一些配置信息。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章