当前位置: 首页 > 知识库问答 >
问题:

文本的 Hadoop 组合器类

司空实
2023-03-14

我仍在试图获得何时使用Hadoop combiner类的直觉(我看到了一些文章,但它们对我的情况没有特别的帮助)。

我的问题是,当组合器类的值为 Text 类时,使用组合器类是否合适?例如,假设我们有来自映射器的以下输出:

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

我们可以在这里应用一个组合器类吗?

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

在它到达减速器之前?

共有2个答案

濮阳俊明
2023-03-14

当有使用可交换或关联方法的情况时,使用组合器类。交换示例:

abc=cba 在组合任务执行期间执行 (a*b=d),然后发送 d,c 的值到化简器。现在,化简器只需执行一个任务而不是两个任务,即 a*b = d d*c 即可获得最终答案。如果使用组合器只需要做d*c。

类似地,对于关联(a b)c=a(b c)关联(分组)和交换(移动)结果不会因您如何乘法或加法而有所不同。组合器主要用于遵循关联的结构化数据

合并器的优点:

  • 它减少了Map和reducer之间的网络I/O。
  • 它减少了reducer中的磁盘I/O,这是Comabiner中执行的一部分
昝涛
2023-03-14

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

现在没有理由不能引入一个组合器来累积每个键的观察值列表(我假设这就是你的例子所展示的),但是有些事情会使它变得更棘手。

如果要输出

如果您想要对输出列表进行排序和重复数据删除,您可能会遇到问题——因为组合器/缩减器逻辑需要将文本对象标记回单词,对列表进行排序和重复数据删除,然后重新构建单词列表。

直接回答你的问题 - 什么时候合适,好吧,我可以想到一些例子:

  • 如果您想找到与每个键关联的字典最小或最大值
  • 每个键都有数百万个值,您想“随机”采样一小部分值

 类似资料:
  • 现在我正在编写一个 Java 程序,使用哈道普映射还原将输出写入 HBase。问题是关于合并器类的。因为现在我的 reduce 类扩展了 TableReducer,而不是化简器。那么我的合并器类呢,它应该也扩展表还原器,还是仍然扩展化简器?

  • 它考虑第一个KV对并给出相同的输出...!!??因为我只有一个价值。为什么它同时考虑钥匙和制造 既然我们考虑的是一次一对千伏?我知道这是一个错误的假设;请有人纠正我这一点

  • 你好,我正在尝试实现java hadoop应用程序。我想制作映射器 我在主类中有这样的配置: 在这里,我必须说将使用哪个输出键和输出值。有没有可能将其设置为 ok 对于映射器使用此输出键和值,但对于组合器使用不同的? 非常感谢您的回答

  • 我在一个伪分布式hadoop设置上运行mapreduce作业。在哪里可以找到映射器、分割器和合并器的输出文件?有办法检查每个操作的输出吗?

  • 我运行了一个简单的wordcount MapReduce示例,在组合器输出中添加一个小变化的组合器,组合器的输出不被Reducer合并。场景如下 context.write(t,new IntWritable(1));//添加了我自己的输出 我运行了一个简单的wordcount MapReduce示例,在组合器输出中添加一个小变化的组合器,组合器的输出不被Reducer合并。场景如下:在组合器中,