3

Hadoop MapReduce 中是否可以使用以下架构?

使用分布式键值存储(HBase)。因此,除了值之外,还会有一个与值相关联的时间戳。Map & Reduce 任务是迭代执行的。Map,在每次迭代中都应该接受在上一次迭代中添加到存储中的值(也许是具有最新时间戳的那些?)。Reduce 应该接收 Map 的输出以及来自 store 中其键与 reduce 必须在当前迭代中处理的键匹配的对。reduce 的输出到 store。

如果可能,哪些类(例如:InputFormat、Reduce 的 run())应该被扩展,以便代替常规操作发生上述操作。如果这是不可能的,是否有任何替代方法可以实现相同的目标?

4

2 回答 2

0

因此,您在迭代 n-1 中的“商店”可能是这样的:

键(时间戳|值)

a 1|x, b 2|x, c 3|x, d 4|x

在迭代 n 中,添加了这些对: ... b 5|x, d 6|x

映射器会找到这 2 条记录,因为时间戳 > 4 并将其放入中间结果中

reducer 现在会发现,对于这两条记录,在 n-1 存储中还有另外两条匹配的记录:b 2|x, d 4|x

因此,reduce 阶段的输出将是(无论顺序如何): b 5|x, d 6|x, b 2|x, d 4|x

那是你要的吗?

于 2010-02-16T16:29:30.303 回答
0

所以如果我真的理解你的话,我会设计如下:你会使用一个 IdentityMapper,这里不需要特殊的逻辑。

我会将密钥和时间戳放在一起作为该对的密钥。将您的值作为该对的值:

  • HadoopKey = {key|timestamp}
  • HadoopValue = {值)

您现在必须实现自己的比较器,以便具有相同原始密钥但不同时间戳的对将被识别为具有相同密钥并因此一起去。(分组比较器)

重要的是,reducer 的对按时间戳降序排列。(密钥比较器)

看看

  • RawComparator 类,
  • Jobconf 的 setOutputValueGroupingComparator() &
  • setOutputKeyComparatorClass() 方法
  • 和“Hadoop - 权威指南”,第 4 章,第 100 页
  • 或者只是问,如果你需要帮助;-)

Reducer 将接收所有具有相同密钥的对 -哎呀,破坏者......,这些现在应该按时间戳排序。如果第一个 - 也是最年轻的 - 时间戳符合此迭代的条件,则发出此 reducer 调用的所有键值对。如果时间戳不合格,则不会发出具有此键的对。

我认为应该这样做。

于 2010-02-16T16:56:24.077 回答