我只是想确认我对 0 reducer 和 identity reducer 之间区别的理解。
- 0 reducer 表示将跳过 reduce 步骤,mapper 输出将是最终输出
- 身份缩减器意味着洗牌/排序仍然会发生吗?
你的理解是正确的。我将其定义如下:如果您不需要对地图结果进行排序 - 您设置 0 减少,并且该作业仅称为地图。
如果您需要对映射结果进行排序,但不需要任何聚合 - 您选择身份归约器。
为了完成这幅图,我们有第三种情况:我们确实需要聚合,在这种情况下,我们需要 reducer。
使用 Identity Reducer 的另一个用例是将所有结果合并到 <# of reducers> 输出文件中。如果您使用 Amazon Web Services 直接写入 S3,这会很方便,特别是当映射器输出很小(例如 grep/搜索记录),并且您有很多映射器(例如 1000 个)时。
这取决于您的业务需求。如果您正在计算字数,您应该减少地图输出以获得总结果。如果您只想将单词更改为大写,则不需要减少。
“No Reducer” (mapred.reduce.tasks=0)和“Standard reducer”(即 IdentityReducer (mapred.reduce.tasks=1 等))之间的主要区别在于,当您使用“No reducer”时,MAP 之后没有分区和改组过程阶段。因此,在这种情况下,您将从映射器获得“纯”输出,而无需任何进一步处理。它有助于开发和调试目的,但不仅如此。