HDFS之append数据到已存在文件中

时间:2023-03-09 07:04:44
HDFS之append数据到已存在文件中

遇到一个问题,想往已存在的hdfs文件中直接添加数据,默认的话应该是被拒绝的。查看了一些资料,可以这样操作:

  1. pdfs-site.xml中添加append支持:

    <property>
    <name>dfs.support.append</name>
    <value>true</value>
    </property>
  2. 编写appendToFile函数:

    下面的函数建立在FileSystem已配置且连接成功的情况下。

    public void appendToFile(String path, String line){
    
        Boolean isAppendable = Boolean.valueOf(fs.getConf().get("dfs.support.append"));
    
        if (isAppendable){
    try{
    Path f = new Path(path);
    FSDataOutputStream dos = null;
    if(!fs.exists(f)){
    dos = fs.create(f);
    } else{
    dos = fs.append(f);
    }
    dos.writeBytes(line);
    dos.close();
    } catch (Exception e){
    e.printStackTrace();
    }
    }
    else{
    System.err.println("Please set the dfs.support.append property to true");
    }
    }
  3. 确保hdfs不在安全模式下

Last but not least,一定要检查自己的文件路径有没有写错。其实,导致我的错误的始作俑者是文件路径。我把/user/hadoop/flink-test/test写成了user/hadoop/flink-test/test,少写了一个/。哈哈哈,简直是笑话。