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,少寫了一個/。哈哈哈,簡直是笑話。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM