MapReduce 中没有 运行 分区器的多个缩减器

Multiple reducers without running partitioner in MapReducer

我试图理解运行在 MR 作业中使用多个 reducer 的概念,并且了解到是分区器决定哪个(键,值)对进入哪个 reducer。

我的问题是:

我们可以 运行 没有 运行 宁分区器的多个减速器吗?那是一个有效的场景吗?

如果您不指定分区程序,则默认 HashPartitioner 运行。它只是根据键进行散列:

public int getPartition(K2 key, V2 value,  int numReduceTasks) {
    return (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks;
}

将分区器视为决定哪个化简器(桶)将处理映射器的特定 key-value(元素)输出的实体。

默认分区器使用键的散列函数在 reducer 中划分元素。打个比方,core java map collection 如何使用哈希函数来决定元素 (key-value) 的 bucket (reducer)。

在此过程中,它保证 same key 被发送到 single reducer(它处理钥匙)。因此,如果 mapper 发出 m unique 键(每个键可以有任何计数)并且有 n 个 reducer,partitioner 会尝试分发键,以便每个 reducer 得到m/n 唯一键以及与该键关联的值列表。

注意,可以在程序中设置reducer的个数。这意味着您是说分区程序限制可用于分发密钥的存储桶数量。