我一直在尝试在Amazon EMR中使用Hadoop流来为一堆文本文件执行简单的字数统计。为了掌握hadoop流媒体和亚马逊的EMR,我也采用了非常简化的数据集。每个文本文件中只有一行文本(该行可以包含任意大量的单词)。
映射器是一个R脚本,它将行拆分为单词并将其反射回流中。
cat(wordList[i],"\t1\n")
我决定使用LongValueSum Aggregate reducer将计数加在一起,所以我不得不用LongValueSum作为我的mapper输出的前缀
cat("LongValueSum:",wordList[i],"\t1\n")
并将reducer指定为“aggregate”
我现在的问题如下:
mapper和reducer之间的中间阶段,只需对流进行排序。它并没有真正由键组合。我对吗?我问这个是因为如果我不使用“LongValueSum”作为mapper输出的单词的前缀,在reducer中我只接收按键排序的流,但不会聚合。那就是我刚收到K,而不是(K,list(Values))在reducer处。我是否需要在命令中指定合并器?
如何使用其他聚合减速器。我看到,http://hadoop.apache.org/mapreduce/docs/r0.21.0/api/org/apache/hadoop/mapred/lib/aggregate/package-summary.html
如何在AMAZON EMR中指定这些组合器和减速器?
我相信已经在Hadoop流媒体中为组合器提交并修复了此类问题,但我不确定AMAZON EMR的托管版本以及此修复程序可用的版本。
答案 0 :(得分:1)
mapper和reducer之间的中间阶段,只是对流进行排序。它并没有真正由键组合。我对吗?
流式传输中的aggregate
reducer确实实现了相关的组合器接口,因此Hadoop会在它认为合适时使用它[1]
这就是我刚收到的K,而不是(K,list(Values))在reducer处。
使用流媒体界面,您始终可以获得K,V值对;你永远不会收到(K,list(values))
如何使用其他聚合减速器。
你不确定哪一个?您指定的链接会快速汇总每个
的行为我认为已经提交并修复了此类问题
你在想什么?
不确定AMAZON EMR托管的版本
EMR基于Hadoop 0.20.2
为每个选项指定java类名是否足够?
你的意思是在流媒体的背景下?还是聚合框架?