Hadoop如何配置hdfs默认路径JavaAPI?

How to configure hdfs default path with Hadoop Java API?

我在 Windows 10 上使用带有 Hadoop Java 客户端 API 的 Hadoop 文件系统 3.3.0。下面是 Hadoop 配置文件。

核心-site.xml

<configuration>
    <property>
        <name>fs.default.name</name>
        <value>hdfs://localhost:9000</value>
     </property>
</configuration>

hdfs-site.xml

<configuration>
    <property>
        <name>dfs.replication</name>
          <value>1</value>
     </property>
     <property>
        <name>dfs.http.address</name>
          <value>localhost:50070</value>
     </property>        
    <property>
        <name>dfs.name.dir</name>
        <value>file:///C:/hadoop-3.3.0/data/hdfs/namenode</value>
     </property>
     <property>
          <name>dfs.data.dir</name>
          <value>file:///C:/hadoop-3.3.0/data/hdfs/datanode</value>
     </property>
</configuration>

并且我尝试使用 Java API.

将一些文件保存到 Hadoop 文件系统中
Configuration conf = new Configuration();
conf.addResource(new Path("file:///C:/hadoop-3.3.0/etc/hadoop/core-site.xml"));
conf.addResource(new Path("file:///C:/hadoop-3.3.0/etc/hadoop/hdfs-site.xml"));
FileSystem hadoopFs = FileSystem.get(conf);

Path hadoopPath = new Path(filename);
        
FSDataOutputStream hadoopOutStream = null;
BufferedWriter bw = null;
        
if(hadoopFs.exists(hadoopPath)) {
    hadoopOutStream =hadoopFs.append(hadoopPath);
} else {
    hadoopOutStream = hadoopFs.create(hadoopPath, true); 
}
        
bw = new BufferedWriter(new OutputStreamWriter(hadoopOutStream,StandardCharsets.UTF_8));
bw.write("data....");
bw.close();
hadoopOutStream.close();

文件写入成功,没有异常。但问题是保存文件的路径不是我在配置文件中描述的 Hadoop 主文件夹。

当我执行Hadoop命令界面时,输出如下,

>hdfs dfs -ls /user/joseph
Found 1 items
-rw-r--r--   1 joseph supergroup     172120 2020-12-11 17:34 /user/joseph/saved_data.csv

保存文件的默认文件夹不在hadoop_home,而是在Windows用户文件夹。如何修改默认保存文件夹?

HADOOP_HOME是你的Hadoop安装路径,与hdfs路径无关。 默认情况下,HDFS 将在其 /user/nameOfUser 目录中存储一个目录。 /user 部分可由 config dfs.user.home.dir.prefix 配置,默认值为 /user 您可以在您的 hdfs 客户端配置中更改它,以使用其他前缀而不是 /user