我一直在尝试使用 Amazon EMR 中的 Hadoop 流对一堆文本文件进行简单的字数统计。为了掌握 hadoop 流和 Amazon 的 EMR,我也采用了一个非常简化的数据集。每个文本文件中只有一行文本(该行可以包含任意数量的单词)。
映射器是一个 R 脚本,它将行拆分为单词并将其吐回流中。
cat(wordList[i],"\t1\n")
我决定使用 LongValueSum Aggregate reducer 将计数加在一起,因此我必须在映射器输出前加上 LongValueSum
cat("LongValueSum:",wordList[i],"\t1\n")
并将减速器指定为“聚合”
我现在的问题如下:
mapper 和 reducer 之间的中间阶段,只是对流进行排序。它并没有真正通过按键组合。我对吗?我问这个是因为如果我不使用“LongValueSum”作为映射器输出的单词的前缀,在reducer 处我只会收到按键排序的流,但不会聚合。那就是我只收到 K 的排序,而不是减速器的 (K, list(Values)) 。我需要在命令中指定组合器吗?
如何使用其他聚合减速器。我看到,http://hadoop.apache.org/mapreduce/docs/r0.21.0/api/org/apache/hadoop/mapred/lib/aggregate/package-summary 上有很多其他的 reducer/aggregate/combiners 。 html
这些组合器和减速器是如何在 AMAZON EMR 设置中指定的?
我相信此类问题已在 Hadoop 流中为组合器提交并修复,但我不确定 AMAZON EMR 托管的版本是什么,以及此修复可用的版本。
- 自定义输入格式和记录读取器和写入器怎么样。有一堆用 Java 编写的库。为每个选项指定 java 类名是否足够?