如果我们将 MR 作业配置为仅使用单个 reducer 运行,那么不需要调用 Partitioner 似乎是合乎逻辑的。
但是我只是试了一下,看起来分区器被调用了,即使作业配置了一个减速器。
任何想法为什么需要这样做?
如果我们将 MR 作业配置为仅使用单个 reducer 运行,那么不需要调用 Partitioner 似乎是合乎逻辑的。
但是我只是试了一下,看起来分区器被调用了,即使作业配置了一个减速器。
任何想法为什么需要这样做?
这是因为将键/值对分配给特定的减速器是扮演分区器角色的类的责任。即使只有一个 reducer,您仍然需要一个分区器来将键/值对分配给那个 reducer。
任何默认值或 if-there's-only-one-reducer 逻辑的存在有效地将分区分配行为分配到分区器之外的地方,这并不是真正好的 OO 设计。
在大多数情况下,即使您只有 1 个 reducer,不调用 partitioner 也会与调用它相同。但是如果抛出异常或程序由于其他原因崩溃,不调用分区程序可能会隐藏程序中的错误,这有点做作,因为您在分区程序中发现的任何错误很可能很容易在其他任何地方找到。由于调用它的成本非常低,因此没有理由不调用它,因此不调用它真的没有任何好处。