Fork me on GitHub

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,少写了一个/。哈哈哈,简直是笑话。

posted @ 2019-01-08 14:11  Byron_NG  阅读(2276)  评论(0编辑  收藏  举报