hadoop mapreduce for aws emr服务

v2g6jxz6  于 2021-06-02  发布在  Hadoop
关注(0)|答案(0)|浏览(141)

我只是对aws emr执行的mapreduce机制感到困惑。据我所知,您只需要识别输入文件的目录,识别Map器和缩减器函数,emr将帮助您进行无序排列和排序。然而,当我试着运行一个类似字数统计的程序时,却失败了。
我试图从csv文件中删除重复的ID(第一个字段),如下所示:

1712783,AA,B,C
28218,m,wiw,oo
28218,oqoo,now,ee
76812,wpq,oei,od
23192,kwl,lqo,pr,
23192,qow,pd,82,
1712783,qow,lf,s
...

它们被放在同一个目录下。我的mapper程序只是打印出这些行,希望emr能帮助我对具有相同id的条目进行排序。

public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String line;
    while((line = br.readLine()) != null){
        System.out.println(line);
    }
}

我的reducer程序试图读取每个条目,并试图识别这个条目是否与上一个条目具有相同的id。忽略与以前具有相同id的。

public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String line;
    String lastId = null;
    String currentId = null;
    while((line = br.readLine()) != null){
        currentId = line.split(",")[0];
        if(lastId == null || !currentId.equals(lastId){
            lastId = currentId
            System.out.println(line);
        }

    }
}

当我试着在本地机器上用一个特定的文件和bash脚本运行程序来模拟bash排序过程时,效果很好。然而,当我在emr上尝试我的程序时,我发现了结果文件 part-00000, part-00001, part00002 ... 是部分排序的,条目是按每个文件中的id排序的,有时相同的id出现在不同的文件中。怎么会这样?看起来emr确实在每个文件中单独Map减少了工作量,而不是整个目录。以前有人遇到过这种情况吗?我认为结果文件应该全部排序,我可以通过连接每个部分来构建一个完整的排序文件。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题