Hadoop将数据附加到hdfs文件并忽略重复的条目

时间:2015-06-17 13:13:51

标签: java hadoop mapreduce hive hdfs

如何将数据附加到HDFS文件并忽略重复值?

我有一个巨大的HDFS文件(MainFile),我有两个来自不同来源的新文件,我想将这些文件中的数据附加到MainFile。

主文件和其他文件具有相同的结构。

2 个答案:

答案 0 :(得分:0)

您可以创建mapreduce作业以合并hdfs中的文件,或者使用读取"其他文件"并写入" MainFile":

FileSystem fs = FileSystem.get(new Configuration());
FileStatus[] status = fs.listStatus(new Path(/*2 other files*/));
for (int i=0;i<status.length;i++){
    BufferedReader br=new BufferedReader(new InputStreamReader(fs.open(status[i].getPath())));
    String line;
    line=br.readLine();
    while (line != null){
        line=br.readLine();
        BufferedWriter br=new BufferedWriter(new OutputStreamWriter(fs.append(/*main file*/));
        br.write(line);
        br.close();
    }
}

答案 1 :(得分:-1)

由于HDFS用于一次写入,因此多次读取。我们无法更改包含Hdfs文件。您正在尝试将数据附加到hdfs中的文件。复制文件intohdfs然后你可以使用-getmerge实用程序。

hadoop fs -getmerge [addnl]。

使用map reduce的另一个解决方案是:将新文件作为分配缓存文件(它应该适合内存)并读取已存在于hdfs中的文件并比较Map方法中的记录。