Hadoop配置对象未指向hdfs文件系统

时间:2015-01-21 16:27:24

标签: java hadoop hdfs

您好我正在尝试用Java创建小型Spark程序。我正在创建hadoop配置对象,如下所示:

Configuration conf = new Configuration(false);
conf.addResource(new Path("/dir/core-site.xml"));
conf.addResource(new Path("/dir/hdfs-site.xml"));
conf.addResource(new Path("/dir/yarn-site.xml"));

当我调用以下内容时,我得到文件系统,但它指向本地文件系统,而不是hdfs文件系统

FileSystem fs = FileSystem.get(conf);

请指导我是Hadoop的新手。提前谢谢。

3 个答案:

答案 0 :(得分:0)

我通常将core-site.xml(以及其他文件)保存在类路径中,并按如下方式获取配置:

Configuration conf = new Configuration();
FileSystem localfs = FileSystem.getLocal(conf);
FileSystem hdfs = FileSystem.get(conf);

以下是我core-site.xml的内容:

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <property>
    <name>fs.default.name</name>
    <value>hdfs://{hadoop-server-addr}</value>
  </property>
</configuration>

答案 1 :(得分:0)

将hdfs-site.xml和core-site.xml添加到类路径。并使用以下代码。

Configuration conf = new Configuration();
FileSystem hdfs = FileSystem.newInstance(conf);

它会选择xmls中提到的配置。

答案 2 :(得分:0)

要更好地调试问题,请在创建新的Configuration实例后添加此行。这会给你一个更好的主意。

Configuration conf = new Configuration(false);
conf.setQuietMode(false);

在大多数情况下,Configuration无法加载路径字符串指定的资源时,将默认使用本地文件系统而不是hdfs。在这种情况下,Configuration的默认行为是静默失败并为请求的密钥返回null。在这种情况下,请求的密钥是fs.defaultFS,即namenode主机。然后,FileSystem实例默认使用file:///方案,它是本地文件系统。