2012-02-08 77 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