您好我正在尝试用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的新手。提前谢谢。
答案 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:///
方案,它是本地文件系统。