主要講解org.apache.hadoop.conf包裏的3個類的做用。 java
看完這個,你絕對能夠對配置項這一塊很是清楚了。 算法
類的個數: 3個 1 包: 【org.apache.hadoop.conf】 描述:本包與【配置參數配置】相關,包含3個類(接口), Configurable, Configuration, Configured. 1.1) Configurable 【接口】 public interface Configurable { 函數成員: void setConf ( Configuration conf) ; //接口函數,設置Configuration對象 Configuration getConf() ; //接口函數,獲取Configuration 對象。 } 1.2)Configuration 【類】 public class Configuration { 變量成員: private static final Logger LOG = LogFormatter.getLogger("org.apache.hadoop.conf.Configuration"); private ArrayList defaultResources = new ArrayList(); private ArrayList finalResources = new ArrayList(); private Properties properties; private ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); 函數成員: public Configuration() { 1- 在本地的defaultResources列表中添加"hadoop-default.xml" 2- 在本地的finalResources列表中添加"hadoop-site.xml" } public Configuration(Configuration other) { 1- 本地的defaultResources無條件設置爲other相應的defaultResources的複製版本。 2- 本地的finalResources無條件設置爲other相應的defaultResources的複製版本。 3- 只有當other的properties有效時,才把本地的properties設置爲other的properties 的複製版本。 } public void addDefaultResource(String name) { 1- defaultResources列表中添加name 2- 設置本地properties爲null } public void addDefaultResource(File file) { 1- defaultResources裏添加file 2- 設置本地properties爲NULL } public void addFinalResource(String name) { 1- finalResources裏添加name 2- 設置本地properties爲NULL } public void addFinalResource(File file) { 1- finalResources裏添加file 2- 設置本地properties爲NULL } private synchronized void addResource(ArrayList resources, Object resource) { 1- 往resources列表裏添加resource 2- 設置本地properties爲NULL } public Object getObject(String name) { 直接從本地properties中查詢name對應的對象Object. 經過方法get(name) } public void setObject(String name, Object value) { 直接put(name,value)放入properties中。 } public Object get(String name, Object defaultValue) { 若是properties中存在name對應的object(經過getObject函數),則返回查詢結果 不然返回參數defaultValue. } public String get(String name) { 直接從properties中查詢getProperty(name) } public void set(String name, Object value) { 直接對properties設置setProperty(name,value.toString()); } public String get(String name, String defaultValue) { 若是從properties中查詢getProperty(name不爲空,則返回結果 不然返回defaultValue. } public int getInt(String name, int defaultValue) { 嘗試查詢name對應的整數,失敗則返回defaultValue. } public void setInt(String name, int value) { 在本地properties中加入(name,value). } public long getLong(String name, long defaultValue) { 嘗試獲取name對應的long,失敗則返回defaultValue. } public void setLong(String name, long value) { 設置(name,value). } public float getFloat(String name, float defaultValue) { 嘗試獲取name對應的float,失敗則返回defaultValue. } public boolean getBoolean(String name, boolean defaultValue) { 嘗試獲取name對應的boolean,失敗則返回defaultValue. } public void setBoolean(String name, boolean value) { 往properties中添加(name,value); } public String[] getStrings(String name) { 嘗試將name經過", \t\n\r\f"來分割,結果做爲數組返回。 } public Class getClass(String name, Class defaultValue) { 嘗試找到name對應的class,不存在的話則返回defaultValue. } public Class getClass(String propertyName, Class defaultValue,Class xface) { 嘗試找到propertyName對應的class,沒有則賦值爲defaultValue. 總之,這二者任意一個結果必須知足能夠轉化爲xface類型。 } public URL getResource(String name) { 經過本地的classLoader找到name對應的URL } public void setClass(String propertyName, Class theClass, Class xface) { 在保證theClass能夠轉化爲xface的前提下 設置(propertyName,theClass). } private synchronized Properties getProps() { 1- 若是本地properties未初始化,則基於defaultResources&finalResources來初始化properties. 2- 保證properties初始化後,返回properties. } private void loadResources(Properties props, ArrayList resources, boolean reverse, boolean quiet) { 基於resources裏的各個item,來賦值props. } private void loadResource(Properties properties, Object name, boolean quiet) { 基於單個name指定的文件,來賦值props. } public InputStream getConfResourceAsInputStream(String name) { 嘗試作這樣的事情 1- name找到對應的URL 2- URL.openStream(). } public Reader getConfResourceAsReader(String name) { 嘗試作這樣的事情 1- name找到對應的URL 2- new InputStreamReader(url.openStream()). 3- 固然失敗了,則返回NULL } private void toString(ArrayList resources, StringBuffer sb) { 遍歷resources,將內容添加到sb中去 1- 文件,直接添加文件內容 2- 字符串,那就直接添加字符串吧。 } public String toString() { 格式以下: Configuration: +defaults: + defaultResources對應的字符串 +final: +finalResources對應的字符串 } public void write(OutputStream out) throws IOException { 遍歷本地的properties 中的key,value. 過濾掉value不爲 string類型的配置項。 合法的配置項經過out寫。 } public File getFile(String dirsProp, String path) throws IOException { 1- 把dirsProp 分割成若干數組 2- 從數組中經過某個算法從某個下標(不必定是0,而且會保證遍歷數組一遍)開始遍歷數組每一項。 3- 當這個數組對應的文件夾存在或者能夠被建立時,返回(選中的數組項,path)構成的file. } } 1.3)Configured【類】 Public class Configured implements Configurable { private Configuration conf; 函數成員以下: public void setConf(Configuration conf) { 設置本地conf爲參數conf指向的對象的引用 } public Configuration getConf() { 返回本地的 conf } public Configured(Configuration conf) { 設置本地conf爲參數conf指向的對象的引用 } }