Java 重新运行Hadoop作业时,分区的mapoutput是否仍将转到相同的还原器?

Java 重新运行Hadoop作业时,分区的mapoutput是否仍将转到相同的还原器?,java,hadoop,mapreduce,Java,Hadoop,Mapreduce,在hadoop中,假设节点的数量是固定的(运行期间没有服务器崩溃),如果我使用相同的分区器(例如,映射输出键上的哈希分区)对映射器输出进行分区,并且我执行作业以读取相同的数据集两次。是否确定具有相同键的数据将进入相同的减速器?谢谢 例如,my mapoutput由两行组成: 键值 什么都行 什么都行 假设我有两个减速机1和2。 在第一次运行中,行“A | anywhere”进入减速器1,“B | anywhere”进入减速器2。 如果我再次运行,是否有可能“A |任何东西”进入减速器2,“B |

在hadoop中,假设节点的数量是固定的(运行期间没有服务器崩溃),如果我使用相同的分区器(例如,映射输出键上的哈希分区)对映射器输出进行分区,并且我执行作业以读取相同的数据集两次。是否确定具有相同键的数据将进入相同的减速器?谢谢

例如,my mapoutput由两行组成: 键值

什么都行

什么都行

假设我有两个减速机1和2。 在第一次运行中,行“A | anywhere”进入减速器1,“B | anywhere”进入减速器2。 如果我再次运行,是否有可能“A |任何东西”进入减速器2,“B |任何东西”进入减速器1


谢谢

映射/减少任务与节点之间没有关联。当map/reduce任务即将运行时,计划程序会选择一个可用的空闲map/reduce插槽(它可能/可能不是上次运行的同一台机器)来运行该任务。因此,当一个作业重新运行时,同一个密钥可能会由不同的还原程序处理。这就是Hadoop框架容错的原因。

只是好奇-这有什么关系?因为在我的例子中,我的新数据必须在reduce端加入旧数据。如果HDFS中的旧数据被读回,并通过映射器,并通过相同的键进行分区,这意味着它只在本地机器上执行,这不会非常昂贵,因为它不必通过网络从其他datanode读取数据。