gpt4 book ai didi

Hadoop 向所有 reducer 发送记录

转载 作者:可可西里 更新时间:2023-11-01 14:16:55 26 4
gpt4 key购买 nike

如何将特定记录发送到我的所有 reducer?

我知道 Partitioner 类及其作用,但我没有看到任何简单的方法来确保将记录发送到所有 reducer。

基本上,Partitioner 有这个方法:

 int getPartition(K2 key,
V2 value,
int numPartitions)

我的第一个想法是让 Partitioner 和 Mapper 如下协作:Mapper 保持输出记录的次数等于 reduce 任务的数量,Partitioner 返回所有整数(从 0 到 numPartitions-1) , 这样可以确保记录到达所有分区。

还有其他更聪明的方法可以解决这个问题吗?例如,我为需要发送到所有分区的记录返回 -1,当框架看到返回的 -1 时,它会为我执行此操作。

最佳答案

分区器不是那样工作的。它的工作是查看键(通常)和值(很少)来确定应该将对发送到哪个 reducer 。这发生在 mapper 之后和 reducer 之前。

相反,您(映射器)应该能够询问可以回答缩减器(分区)总数的配置的上下文。然后,您的映射器可以输出一个复杂的键,其中包含您想要的实际键和一个分区号。你知道要写多少次,因为映射器可以找出缩减器的数量(见上文)。分区器所要做的就是分解复合键值,提取目标缩减器索引并返回该索引。

顺便说一句,这意味着如果您使用这种技术来发送计数(如果您正在排序)或稍后在处理中使用的其他元数据,那么您的真实数据 key 必须遵循相同的复合格式.事实上,您可能必须在复合键中包含一个指示符,描述它是哪种键/值对(例如,1=真实数据,0=处理元数据)。

关于Hadoop 向所有 reducer 发送记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12082825/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com