我已经在我的计算机上以伪分布式模式设置了Hadoop。 我按照“Hadoop - A权威指南”附录A中的说明,以伪分布式模式设置Hadoop。
但是,从以下程序的输出中,可以安全地推断出我的Hadoop正在运行到独立模式(即本地模式)。
public static void main(String[] args) {
Configuration conf = new Configuration();
System.out.println(conf);
System.out.println(conf.get("fs.default.name"));
}
输出:
Configuration: core-default.xml, core-site.xml
file:///
输出为file:///
而非hdfs://localhost
。但是core-site.xml
中的属性已正确设置:
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost/</value>
</property>
</configuration>
当我从Eclipse提交测试作业时,它没有显示在jobTracker浏览器UI中,我在某处读到这是因为Hadoop在本地模式下运行。
请告诉我配置中的错误以及如何启用伪分布式模式。为什么我无法使用fs.default.name
文件中指定的默认XML文件覆盖core-site.xml
属性?
答案 0 :(得分:1)
你是如何推出该计划的?如果您没有使用bin / hadoop脚本,则conf / * .xml中的配置文件将不在类路径中,因此将忽略其中的任何值。
您还应该使用ToolRunner启动器:
public class MyJobDriver extends Configured implements Tool {
public static void main(String args[]) {
ToolRunner.run(new MyJobDriver(), args);
}
public int run(String args[]) {
Job job = new Job(getConf());
Configuration conf = job.getConfiguration();
System.out.println(conf);
System.out.println(conf.get("fs.default.name"));
return 0;
}
}
此代码中需要注意的其他一些要点:
然后确保使用bin / hadoop脚本运行作业:
#> bin/hadoop MyApp.jar a.b.c.MyAppDriver
如果您正在使用Eclipse,请确保$ HADOOP_HOME / conf文件夹位于类路径上,并确保在ToolRunner创建Configuration对象时,xml conf文件位于类路径中。