使用java api将数据附加到hadoop中的文件

时间:2014-05-31 12:15:13

标签: java hadoop filesystems append hdfs

我创建了一个包含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");
}

1 个答案:

答案 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