遇到一个问题,想往已存在的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
,少写了一个/
。哈哈哈,简直是笑话。