gpt4 book ai didi

java - 将少量值从 Mapper 传递到 Reducer

转载 作者:可可西里 更新时间:2023-11-01 15:41:28 26 4
gpt4 key购买 nike

如何将 Mapper 中收集的少量元数据传递给 Reducer?在我的特定问题中,我只想传递两个 long 值,所以我不会为这些使用 MultipleOutputFormatMultipleOutputs

我尝试过的一些变体:

(1)

映射器

    context.getCounter("Countergroup", "Counter").increment(1);

reducer

    counter = context.getCounter("Countergroup", "Counter").getValue(); 

计数器不会定期更新,因此 Reducer 中的函数调用结果为 0 值。



(2)

映射器

    context.getConfiguration().setInt("Counter", countTotal);

reducer

    counter = context.getConfiguration().getInt("Counter", 0);          

当然,在运行作业期间无法更改配置(值得尝试)。

已经有关于这个问题的问题,但我找不到有效的答案。此外,API 已更改。我正在使用 Hadoop 0.20.2。



类似问题:

Passing values from Mapper to Reducer

Accessing a mapper's counter from a reducer(这看起来很有希望,但似乎不适用于 0.20.2 API)

最佳答案

如果您无法使用计数器找到问题的解决方案(在您的特定情况下将两个长值从映射器传递到缩减器),另一种方法可以利用顺序反转模式。

在这种模式中,您所做的是从 map 发出一个额外的键值对,键是某个东西,它成为 reducer 接收的第一个键(利用 reducer 按排序顺序接收键的事实)。例如,如果您发出的键是从 1 到 1000 的数值。您的虚拟键可以是“0”。由于 reducer 按排序顺序接收键,因此可以保证在处理任何其他键之前处理虚拟键。

您在新 API 中还有 SetUp() 和 CloseUp() 方法(旧 API 中也有类似的方法,但我不记得名字了)以利用它们仅在每个节点,在该节点上的所有 map/reduce 任务开始/完成之前/之后。

关于java - 将少量值从 Mapper 传递到 Reducer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10746961/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com