2012-02-08 78 views
3

我正在開發一個Java程序來與已經運行的hadoop集羣進行交互。該程序已將HADOOP_HOME作爲環境變量傳遞給它。基於HADOOP_HOME自動加載HDFS配置?

基於此值,我需要加載所有必要的配置資源,然後才能開始與HDFS/MapReduce進行交互。我認爲我需要的文件基於apache documentation。我目前的解決方案是這樣的:

final String HADOOP_HOME = System.getEnv("HADOOP_HOME"); 
Configuration conf = new Configuration(); 

conf.addResource(new Path(HADOOP_HOME, "src/core/core-default.xml")); 
conf.addResource(new Path(HADOOP_HOME, "src/hdfs/hdfs-default.xml")); 
conf.addResource(new Path(HADOOP_HOME, "src/mapred/mapred-default.xml")); 
conf.addResource(new Path(HADOOP_HOME, "conf/core-site.xml")); 
conf.addResource(new Path(HADOOP_HOME, "conf/hdfs-site.xml")); 
conf.addResource(new Path(HADOOP_HOME, "conf/mapred-site.xml")); 

FileSystem hdfs = new FileSystem(conf); 

有沒有更乾淨的方法來做到這一點?希望這種方法不涉及明確設置每個資源?

回答

3

您使用hadoop jar <your-jar>運行您的jar。這會自動設置所有內容。

+0

但這意味着我正在運行我的代碼作爲hadoop地圖減少工作不是這樣嗎?那有什麼影響? – forhas 2013-11-25 12:07:57

+0

你有答案嗎?我需要執行一個jar(不是map reduce作業)並加載配置。 – 2015-08-13 19:49:06

+0

只運行Hadoop jar不會讓它成爲mapreduce作業。 Hadoop jar設置環境,你在jar裏面做什麼取決於你。 – 2015-08-13 20:16:50