hdfs-site.xml是HDFS的配置文件,其中包含了各種對HDFS集群的設置參數,比如集群中存儲文件副本的數量,namenode輔助節點的地址等。對於hdfs-site.xml中的屬性值,我們可以在不同的地方進行設置,
第一種是通過HDFS客戶端代碼進行對屬性值進行設置,這是優先級最高的方式;
第二種是在當前的項目下創建一個hdfs-site.xml文件,對相關屬性的值進行設置;
第三種是在服務器集群中進行自定義hdfs-site.xml的屬性值;
第四張是按照集群默認的配置文件的屬性值來參與相關的操作,這個默認的配置文件是"hdfs-default.xml"
下面我們來一起實驗一下,hdfs讀取配置文件的優先順序:
@Test public void readConf() throws URISyntaxException, IOException, InterruptedException { Configuration conf = new Configuration(); // 默認加載的是本地hadoop安裝路徑下的core-default.xml conf.set("dfs.replication","2"); String s1 = conf.get("dfs.replication"); System.out.println(s1); FileSystem fs = FileSystem.get(new URI("hdfs://192.168.182.101:9000"), conf, "fym000"); fs.copyFromLocalFile(new Path("F:/520.txt"),new Path("/fym/pyx/lll/520.txt")); fs.close(); }
在服務器集群中,hdfs-site.xml文件的配置是這樣的:
<configuration> <property> <name>dfs.replication</name> <value>3</value> </property> <!-- 指定Hadoop輔助名稱節點主機配置 --> <property> <name>dfs.namenode.secondary.http-address</name> <value>192.168.182.103:50090</value> </property> </configuration>
也就是副本數,設置的是3,但是我在客戶端代碼中,將文件的副本數設置為了2,那么運行程序之后,結果如下:
2
同時,訪問namenode的web站點,發現,上傳上去的文件,副本數量是2,說明代碼設置參數值的優先級大於集群自定義配置文件的優先級。
然后繼續比較,本地項目中創建一個對應的配置文件,設置副本數為1,並在上面的代碼中添加一行讀取本地配置文件的代碼:
conf.set("dfs.replication","2");
conf.addResource(new Path("./config/hdfs-site.xml"));
String s1 = conf.get("dfs.replication");
System.out.println(s1);
輸出結果是:
2
192.168.182.103:50090
下面那行ip地址是從本地的項目下的配置文件中讀取的而非從服務器集群的配置文件中。所以看出,客戶端代碼設置的參數的優先級同樣大於本地項目下創建的配置文件設置的參數值。
最后比較一下,本地項目中創建的配置文件和集群中自定義的配置文件的優先級,上面的代碼修改為:
Configuration conf = new Configuration(); // 默認加載的是本地hadoop安裝路徑下的core-default.xml conf.addResource(new Path("./config/hdfs-site.xml")); String s1 = conf.get("dfs.replication"); System.out.println(s1); String s2 = conf.get("dfs.namenode.secondary.http-address"); System.out.println(s2); FileSystem fs = FileSystem.get(new URI("hdfs://192.168.182.101:9000"), conf, "fym000"); fs.copyFromLocalFile(new Path("F:/520.txt"),new Path("/fym/pyx/lll/523.txt")); fs.close();
然后運行,輸出結果如下:
1 192.168.182.103:50090
namenode的web站點顯示如下:
可以看出,在本地項目下的配置文件優先級要高於集群中配置文件的優先級。
然后就是集群中默認的配置文件低於集群中自定義的配置文件的優先級,所以優先順序既可以排列出來了。
客戶端代碼 > 項目目錄下的配置文件 > 集群自定義配置文件 > 集群默認文件