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的个数。这意味着您是说分区程序限制可用于分发密钥的存储桶数量。
我试图理解运行在 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的个数。这意味着您是说分区程序限制可用于分发密钥的存储桶数量。