我创建了一个包含map-reduce作业序列结果的文件。 我已经迭代地输出了一些结果。 我想使用java api将这些数据附加到结果文件中。 我试过fs.append但它不起作用。 目前我正在使用java的内置库(eclipse 4.2.2),当我使用debugin时,我会把它变成一个jar并把它放在一个集群中。
首先,在hdfs中接受“追加”吗? 如果有,任何人都可以告诉我它是如何完成的? Thnx提前。
我用来完成这项工作的代码如下:
try{
Path pt = new Path("/home/results.txt");
FileSystem fs = FileSystem.get(new Configuration());
BufferedWriter br = new BufferedWriter(new OutputStreamWriter(fs.append(pt)));
String line = "something";
br.write(line);
br.close();
} catch (Exception e) {
System.out.println("File not found");
}
答案 0 :(得分:2)
早期版本的HDFS不支持追加操作。文件关闭后,它是不可变的,只能通过编写具有不同文件名的新副本来更改。
查看更多信息here
如果您使用旧版本,这对我有用......
BufferedReader bfr=new BufferedReader(new InputStreamReader(hdfs.open(path))); //open file first
String str = null;
BufferedWriter br=new BufferedWriter(new OutputStreamWriter(hdfs.create(path,true)));
while ((str = bfr.readLine())!= null)
{
br.write(str); // write file content
br.newLine();
System.out.println(" ->>>>> "+str);
}
br.write("Hello "); // append into file
br.newLine();
br.close(); // close it