我仍在试图获得何时使用Hadoop combiner类的直觉(我看到了一些文章,但它们对我的情况没有特别的帮助)。
我的问题是,当组合器类的值为 Text 类时,使用组合器类是否合适?例如,假设我们有来自映射器的以下输出:
fruit apple
fruit orange
fruit banana
...
veggie carrot
veggie celery
...
我们可以在这里应用一个组合器类吗?
fruit apple orange banana
...
veggie carrot celery
...
在它到达减速器之前?
当有使用可交换或关联方法的情况时,使用组合器类。交换示例:
abc=cba 在组合任务执行期间执行 (a*b=d),然后发送 d,c 的值到化简器。现在,化简器只需执行一个任务而不是两个任务,即 a*b = d d*c 即可获得最终答案。如果使用组合器只需要做d*c。
类似地,对于关联(a b)c=a(b c)关联(分组)和交换(移动)结果不会因您如何乘法或加法而有所不同。组合器主要用于遵循关联的结构化数据
合并器的优点:
组合器通常适用于对数据执行某种形式的聚合、最小值、最大值等操作的问题-这些值可以在组合器中为映射输出计算,然后在减缩器中为所有组合输出再次计算。这很有用,因为这意味着不需要在映射器和还原器之间通过网络传输所有数据。
现在没有理由不能引入一个组合器来累积每个键的观察值列表(我假设这就是你的例子所展示的),但是有些事情会使它变得更棘手。
如果要输出
如果您想要对输出列表进行排序和重复数据删除,您可能会遇到问题——因为组合器/缩减器逻辑需要将文本对象标记回单词,对列表进行排序和重复数据删除,然后重新构建单词列表。
直接回答你的问题 - 什么时候合适,好吧,我可以想到一些例子:
如果您想找到与每个键关联的字典最小或最大值
- 每个键都有数百万个值,您想“随机”采样一小部分值
现在我正在编写一个 Java 程序,使用哈道普映射还原将输出写入 HBase。问题是关于合并器类的。因为现在我的 reduce 类扩展了 TableReducer,而不是化简器。那么我的合并器类呢,它应该也扩展表还原器,还是仍然扩展化简器?
它考虑第一个KV对并给出相同的输出...!!??因为我只有一个价值。为什么它同时考虑钥匙和制造 既然我们考虑的是一次一对千伏?我知道这是一个错误的假设;请有人纠正我这一点
你好,我正在尝试实现java hadoop应用程序。我想制作映射器 我在主类中有这样的配置: 在这里,我必须说将使用哪个输出键和输出值。有没有可能将其设置为 ok 对于映射器使用此输出键和值,但对于组合器使用不同的? 非常感谢您的回答
我在一个伪分布式hadoop设置上运行mapreduce作业。在哪里可以找到映射器、分割器和合并器的输出文件?有办法检查每个操作的输出吗?
我运行了一个简单的wordcount MapReduce示例,在组合器输出中添加一个小变化的组合器,组合器的输出不被Reducer合并。场景如下 context.write(t,new IntWritable(1));//添加了我自己的输出 我运行了一个简单的wordcount MapReduce示例,在组合器输出中添加一个小变化的组合器,组合器的输出不被Reducer合并。场景如下:在组合器中,