Configuration 无法在伪模式下设置Hadoop

Configuration 无法在伪模式下设置Hadoop,configuration,hadoop,Configuration,Hadoop,我已经在我的计算机上以伪分布式模式设置了Hadoop。 我按照《Hadoop-权威指南》一书附录A中的说明,在伪分布式模式下设置Hadoop 但是,从以下程序的输出可以安全地推断,我的Hadoop正在以独立模式(即本地模式)运行 输出: Configuration: core-default.xml, core-site.xml file:/// 输出为file://而不是hdfs://localhost。但是,core site.xml中的属性设置正确: <configuration&

我已经在我的计算机上以伪分布式模式设置了Hadoop。 我按照《Hadoop-权威指南》一书附录A中的说明,在伪分布式模式下设置Hadoop

但是,从以下程序的输出可以安全地推断,我的Hadoop正在以独立模式(即本地模式)运行

输出:

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>

fs.default.name
hdfs://localhost/
另外,当我从Eclipse提交测试作业时,它不会显示在jobTracker浏览器UI中,我在某个地方读到,这是由于Hadoop在本地模式下运行

public static void main(String[] args) {
    Configuration conf = new Configuration();
    System.out.println(conf);
    System.out.println(conf.get("fs.default.name"));
}

请让我知道我的配置有什么问题,以及如何启用伪分布式模式。为什么我不能用我在
core site.XML
文件中指定的属性覆盖默认XML文件中的
fs.default.name
属性?

您如何启动该程序?如果您没有使用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;
  }
}
此代码中需要注意的其他几点:

  • 记住使用getConf()提供的配置创建作业-这允许您使用通用选项解析器解析出一些常见的命令行开关(-files,-jt,-fs,=Dkey=value等)
  • 如果需要配置来设置一些自定义参数,请使用job.getConfiguration()获取作业副本,因为作业在构造时会生成深度副本,并且在作业运行时不会应用对原始副本的任何更改
然后确保使用bin/hadoop脚本运行作业:

#> bin/hadoop MyApp.jar a.b.c.MyAppDriver

如果您是从Eclipse启动,请确保$HADOOP_HOME/conf文件夹位于类路径上,然后在ToolRunner创建配置对象时确保xml conf文件位于类路径上。

向fs.default.name添加端口,例如。hdfs://localhost:9000/Thanks. 甚至在我实现您的建议之前,为什么您会说$HADOOP_INSTALL/conf/*xml文件中的所有属性都将被删除?毕竟,从输出中可以很清楚地看出,无论是否在类路径中,core-site.xml都被提取。我是否遗漏了一些关于类路径的信息?如果您不通过bin/hadoop脚本启动代码,那么conf文件夹将不会添加到类路径中,因此属性将被忽略。System.out.println(conf)的输出显示了core-default和core-site.xml文件,但它们只是预期位于类路径上的文件的占位符,如果它们位于类路径上,则会被加载。您已经证明,它们不是作为fs.default.name加载的。name不是您在core-site.xml中配置的值