如果我们将mr作业配置为仅使用一个reducer运行,那么不需要调用分区器似乎是合乎逻辑的。不过,我只是对此进行了一次尝试,它看起来像是调用了partitioner,即使作业配置了一个reducer。你知道为什么要这么做吗?
qnzebej01#
在大多数情况下,不调用分区器与调用它是一样的,即使您只有一个reducer。但是,如果抛出异常或程序因其他原因崩溃,不调用分区器可能会隐藏程序中的错误,尽管这有点做作,因为在分区器中找到的任何错误都很容易在其他地方找到。既然打电话的成本很低,就没有理由不打,不打电话真的没有好处。
uubf1zoe2#
这是因为将键/值对分配给特定的reducer是扮演partitioner角色的类的责任。即使只有一个减速机,您仍然需要一个分区器将键/值对分配给该减速机。任何默认值的存在或者只有一个reducer逻辑有效地将分区分配行为分配到分区器之外的地方,这并不是很好的oo设计。
2条答案
按热度按时间qnzebej01#
在大多数情况下,不调用分区器与调用它是一样的,即使您只有一个reducer。但是,如果抛出异常或程序因其他原因崩溃,不调用分区器可能会隐藏程序中的错误,尽管这有点做作,因为在分区器中找到的任何错误都很容易在其他地方找到。既然打电话的成本很低,就没有理由不打,不打电话真的没有好处。
uubf1zoe2#
这是因为将键/值对分配给特定的reducer是扮演partitioner角色的类的责任。即使只有一个减速机,您仍然需要一个分区器将键/值对分配给该减速机。
任何默认值的存在或者只有一个reducer逻辑有效地将分区分配行为分配到分区器之外的地方,这并不是很好的oo设计。