簡體   English   中英

Hadoop配置對象未指向hdfs文件系統

[英]Hadoop Configuration object not pointing to hdfs file system

嗨,我正在嘗試用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的新手。 提前致謝。

我通常將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>

將您的hdfs-site.xml和core-site.xml添加到類路徑。 並使用以下代碼。

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

它將選擇xml中提到的配置。

為了更好地調試問題,請在創建新的Configuration實例后添加此行。 這會給你一個更好的主意。

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

在大多數情況下,當Configuration無法加載由路徑字符串指定的資源時,默認為本地文件系統而不是hdfs。 在這種情況下, Configuration的默認行為是靜默失敗並為請求的密鑰返回null 在這種情況下,請求的密鑰是fs.defaultFS ,即namenode主機。 然后, FileSystem實例默認為file:///方案,這是本地文件系統。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM