2012-04-08 63 views
0

我仍然试图弄清楚什么时候使用Hadoop合并器类(我看到一些文章,但他们没有特别的帮助我的情况)。用于文本的Hadoop合并器类

我的问题是,当对的值是Text类时,是否适合使用组合器类?举例来说,假设我们从映射器的输出如下:

fruit apple 
fruit orange 
fruit banana 
... 
veggie carrot 
veggie celery 
... 

我们可以将一个组合类这里是:

fruit apple orange banana 
... 
veggie carrot celery 
... 

甚至达到减速过吗?

+0

呃,如果这就是你希望你的reducer接收你的数据......那么是的。 – 2012-04-08 18:41:40

+0

@BrianRoach减速器基本上是做组合器会做的事情,如果可能的话。你能否详细说明你的答案?作为一个免责声明,我有一个任务,我的教授问我们为什么一个组合器类不能被引入类似于上述例子的情况。不过,我觉得好像可以,这就是我问的原因。 – honeywind 2012-04-08 19:25:44

回答

3

组合器通常适用于您对数据执行某种形式的聚合,最小值,最大值等操作的问题 - 可以在组合器中为地图输出计算这些值,然后再次在减速器中计算所有合并输出。这很有用,因为这意味着您不会在映射器和缩减器之间通过网络传输所有数据。

现在没有理由不能引入一个组合器来累积每个键所观察到的值的列表(我认为这是你的例子所显示的),但是有一些事情会让它变得更诡计。

如果您必须从映射器输出<Text, Text>对,并在reducer中使用<Text, Text>,则组合器可以轻松地将值列表连接在一起,并将其输出为Text值。现在在你的reducer中,你可以做同样的事情,将所有的值连接起来形成一个大的输出。

,如果你想进行排序和去重复输出列表,您可能会遇到一个问题 - 作为组合/减速逻辑需要来标记文本对象回的话,排序和去重列表,然后重建单词列表。

直接回答你的问题 - 它的时候将是适当的,以及我能想到的一些例子:

  • 如果你想找到每个键
  • 您有相关的辞书最小或最大价值每个键的数百万个值,并且您想'随机'抽样一小组值
+0

感谢这是一个很好的解释。因为组合器类会引入重复项,所以您实际上已经达到了目标。 – honeywind 2012-04-09 08:15:23

0

合并器类用于存在使用交换或关联方法的情况。可交换示例:

abc = cba在合并任务执行期间(a * b = d),c然后将d,c的值发送给reducer。现在减速机只需执行一项任务而不是两项任务,即a * b = d d * c即可获得最终答案。如果你使用组合器只需要做d * c。对于关联(a + b)+ c = a +(b + c) 类似地,关联(分组)和交换主要组合器用于结构化数据,其服从交联的联想&。

优势组合的:

  • 它减少了地图和减速
  • 它可以减少磁盘I/O的 减速机为executionn的一部分Comabiner发生之间的网络I/O。