[英]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.