Hadoop MapReduce混淆了AWS EMR服务

时间:2016-10-31 23:50:19

标签: amazon-web-services hadoop mapreduce emr

我对AWS EMR执行的MapReduce机制感到困惑。根据我的理解,您只需要确定输入文件的目录,识别mapper和reducer函数,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
...

放在同一目录下。我的映射器程序只是打印出这些行,并希望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确实在每个文件中单独减少了工作,而不是整个目录。以前有人遇到过这种情况吗?我认为结果文件应该完全排序,我可以通过连接每个部分来构建整个排序文件。

0 个答案:

没有答案