在多个 map() 和 reduce() 调用之间共享数据

Sharing data between multiple map() and reduce() calls

我需要在 map() 和 reduce() 之间共享一个 HashMap 对象。

说明: 我希望 map() 为其当前键检索和更新 HashMap 中的一些数据。 我希望 reduce() 然后能够查看与过去的键值相比当前键是否具有最大值。

并且在最后一个键值对上(我计划为此使用 HashMap.size() 和一个静态整数计数器),我将打印具有最大值的键值对。

所以基本上我需要一个在 map() 和 reduce() 之间共享的 HashMap 对象,然后在 reduce() 调用之间共享一个整数变量。

有帮助吗?

这并不是真正打算使用 mapreduce 的方式...如果您在映射器中创建任何 Hashmap,每个映射器将有一个 hashmap,并且每个 运行 可以有数千个映射任务同一时间。任何 reducer 任务都不知道要检查哪个 Hashmap,并且您没有明确的步骤来合并它们

也许将该数据外部化到 Redis 中会更好,例如

我通过改变方法来管理这个程序。在映射器中,我只是 transformed/processed 我得到的每个 K,V 对。然后我将所有这些传递给 reducer,我可以在 Class' 范围内使用静态变量,因为只有一个 reducer 节点。另外我还学习了清理功能。

简而言之,我遇到这个问题是因为我没有正确理解 Map、Reduce 及其应用程序。