如何使用 ZooKeeper 和 Hadoop 在 reducer 之间共享一个 read/write 变量

How to use ZooKeeper with Hadoop for sharing a read/write variable among reducers

我的问题是: 我如何将 ZooKeeper 与 Hadoop 一起使用,以便所有 reducer 都可以将 getData() / setData() 到一个共享 znode?

我的用例是我需要在我的 MapReduce 作业中的缩减器之间共享一个全局 read/write 变量。为此,我正在尝试使用 ZooKeeper。 我创建了一个 ZooKeeper 对象,它创建一个 znode 并给它一个初始值。下一步是我需要所有的 reducer 都能够为这个 znode 调用 getData() / setData()。这需要将 ZooKeeper 对象传递给所有 reducer,我不知道该怎么做。我尝试序列化 ZooKeeper 对象并将其传递给 reducer(通过配置属性或通过分布式缓存),但 ZooKeeper class 不可序列化。

ZooKeeper 教程和我能找到的所有示例都说明了 ZooKeeper 与多线程应用程序,但其中 none 展示了如何将 ZooKeeper 与映射器或缩减器一起使用。

您不能将 ZooKeeper 对象本身传递给 mappers/reducers。只需确定在 mapper/reducer(如 connectionString)中实例化 ZooKeeper 对象所需的配置,并通过 Configuration 属性传递它。

在 mapper/reducer 秒内与 ZooKeeper 的交互与通常的 Java 程序没有区别。