无法在伪模式下设置Hadoop

时间:2012-07-14 06:11:53

标签: configuration hadoop

我已经在我的计算机上以伪分布式模式设置了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属性?

1 个答案:

答案 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;
  }
}

此代码中需要注意的其他一些要点:

  • 请记住使用getConf()提供的配置创建您的作业 - 这允许您使用通用选项解析器来解析一些常见的命令行开关(-files,-jt,-fs,= Dkey = value等)
  • 如果您需要配置来设置一些自定义参数 - 使用job.getConfiguration()获取作业副本 - 因为Job在您构建它时会进行深层复制,并且在作业运行时不会应用对原始文件的任何更改

然后确保使用bin / hadoop脚本运行作业:

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

如果您正在使用Eclipse,请确保$ HADOOP_HOME / conf文件夹位于类路径上,并确保在ToolRunner创建Configuration对象时,xml conf文件位于类路径中。