1

我一直在尝试使用 Amazon EMR 中的 Hadoop 流对一堆文本文件进行简单的字数统计。为了掌握 hadoop 流和 Amazon 的 EMR,我也采用了一个非常简化的数据集。每个文本文件中只有一行文本(该行可以包含任意数量的单词)。

映射器是一个 R 脚本,它将行拆分为单词并将其吐回流中。

cat(wordList[i],"\t1\n")

我决定使用 LongValueSum Aggregate reducer 将计数加在一起,因此我必须在映射器输出前加上 LongValueSum

cat("LongValueSum:",wordList[i],"\t1\n")

并将减速器指定为“聚合”

我现在的问题如下:

  1. mapper 和 reducer 之间的中间阶段,只是对流进行排序。它并没有真正通过按键组合。我对吗?我问这个是因为如果我不使用“LongValueSum”作为映射器输出的单词的前缀,在reducer 处我只会收到按键排序的流,但不会聚合。那就是我只收到 K 的排序,而不是减速器的 (K, list(Values)) 。我需要在命令中指定组合器吗?

  2. 如何使用其他聚合减速器。我看到,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 托管的版本是什么,以及此修复可用的版本。

  1. 自定义输入格式和记录读取器和写入器怎么样。有一堆用 Java 编写的库。为每个选项指定 java 类名是否足够?
4

1 回答 1

1

mapper 和 reducer 之间的中间阶段,只是对流进行排序。它并没有真正通过按键组合。我对吗?

流中的aggregatereducer 确实实现了相关的组合器接口,因此 Hadoop 如果认为合适就会使用它 [1]

那就是我只收到 K 的排序,而不是减速器的 (K, list(Values)) 。

使用流接口,您始终会收到 K、V 值对;你永远不会收到(K,list(values))

如何使用其他聚合减速器。

您不确定其中的哪一个?您指定的链接快速总结了每个人的行为

我相信此类问题已提交并修复

你在想什么问题?

不确定 AMAZON EMR 托管的是什么版本

EMR 基于 Hadoop 0.20.2

为每个选项指定 java 类名是否足够?

你的意思是在流媒体的背景下?还是聚合框架?

[1] http://hadoop.apache.org/mapreduce/docs/r0.21.0/api/org/apache/hadoop/mapred/lib/aggregate/package-summary.html

于 2011-07-26T04:32:23.963 回答