映射缩减和哈希分区

问题描述 投票:0回答:5

在学习MapReduce时,遇到了这个问题

给定的 Mapreduce 程序的 Map 阶段生成 100 个具有 10 个唯一键的键值对。

当使用哈希分区器时,当至少一个Reduce任务肯定不会被分配任何键时,这个程序可以有多少个Reduce任务(选择所有正确的答案)?

  • [ ] A.3
  • [ ] B.11
  • [ ] C.50
  • [ ] D.101

答案是 B、C、D。

由于唯一键的数量是10,所以我们必须有至少10个reduce任务。并且至少有一个reduce任务有null key。

我无法理解这些答案是如何得出的。请帮助我。

mapreduce hadoop-partitioning
5个回答
1
投票

映射输出中的唯一键仅分配给一个reduce任务。如果有 10 个唯一键并且有 11、50 或 101 个reduce 任务,那么必然存在一些没有键的reduce 任务。


1
投票

由于有 10 个唯一的键,我们需要 10 个减速器,并且由于我们想要 1 个没有分配键的减速器,因此总共有 11 个减速器。

如果reducer的数量大于或等于11,作业将无异常地运行。所以任何大于或等于 11 的数字都是答案。


1
投票

在这种情况下,哈希分区器仅意味着reduce 任务将通过唯一键进行合并。假设一个reduce任务只在一台服务器上完成,因此10个任务中的每一个都是原子的。

模运算符(或任何合理的分区器)将确保 3 个服务器/减速器中的每一个在 10 个任务的情况下都处于活动状态。

对于其他选项,如果“reducer”多于任务,如果我们相信分区函数,所有任务将被分配给一个“reducer”(只有一个剩余)。如果没有额外的上下文,这是荒谬的,或者至少是令人困惑的。显然,只有当任务数量超过减速器/服务器数量时才需要分区。


0
投票

为了让一个reducer输出为空文件,即没有key分配给reducer,我们至少需要11个reducer,因为hashpartitioner是基于哈希函数进行分配的。此处接收数据的合格减速器是part-r-00000到part-r-00009。

Reducer 编号 = key hashcode % n(Reducer 数量)

所以可能的余数是 0 到 n-1。这里我们有 10 个唯一的键,即 10 个不同的余数。即使减速器的数量少于唯一的键数,我们也会有空的减速器文件。在最坏的情况下,如果减速器的数量超过唯一键,我们也会得到一个空的减速器文件。


0
投票

如果我理解正确的话,问题是要问多少个减速器(例如,为每个减速器想象一个单独的服务器)你会“过度配置”你的减速器。也就是说,这里至少需要多少个减速器? 您有 100 个键值对,其中有 10 个唯一键。因此,您至少需要 10 个减速器,因为 100/10 = 10。少于此数量,您将没有足够的减速器 — 您的减速器将配置不足。有了 10 个减速器,您就拥有了所需的最低限度。如果 recuder 超过 10 个,您就会过度配置——您的数量将超过您至少需要的数量。因此,任何大于 10 的数字都会为您提供至少一个备用减速器。

您当然可能想知道为什么有人想要在这里过度配置资源。原因之一可能是容错能力。如果您的一台减速机离线,那么您将有一台备用。

© www.soinside.com 2019 - 2024. All rights reserved.