【问题标题】:How to configure hdfs default path with Hadoop Java API?如何使用 Hadoop Java API 配置 hdfs 默认路径?
【发布时间】:2021-03-22 16:44:27
【问题描述】:

我在 Windows 10 上使用 Hadoop 文件系统 3.3.0 和 Hadoop Java 客户端 API。以下是 Hadoop 配置文件。

core-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 是本地文件系统路径。默认的 HDFS 写入路径是/user/$(whoami),我不确定有没有办法在不指定绝对路径的情况下覆盖它

标签: java hadoop hdfs


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-11
    • 1970-01-01
    • 2012-01-21
    • 2021-02-02
    相关资源
    最近更新 更多