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