遇到一個問題,想往已存在的hdfs文件中直接添加數據,默認的話應該是被拒絕的。查看了一些資料,可以這樣操作:
-
在
pdfs-site.xml
中添加append支持:<property> <name>dfs.support.append</name> <value>true</value> </property>
-
編寫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"); } }
-
確保hdfs不在安全模式下
Last but not least,一定要檢查自己的文件路徑有沒有寫錯。其實,導致我的錯誤的始作俑者是文件路徑。我把/user/hadoop/flink-test/test
寫成了user/hadoop/flink-test/test
,少寫了一個/
。哈哈哈,簡直是笑話。