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



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

我有一个巨大的 HDFS 文件(主文件),我还有 2 个来自不同来源的新文件,我想将该文件中的数据附加到主文件。

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

你可以使用mapreduce作业来合并HDFS中的文件,或者你使用读取"20个文件"并写入"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();
    }
}

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

Hadoop FS -getmerge [addnl].

使用mapreduce的另一种解决方案是:将新文件作为分布式缓存文件(它应该适合内存)并读取hdfs中已经存在的文件,并在Map方法中比较记录。

相关内容

  • 没有找到相关文章

最新更新