📜  MapReduce – 组合器

📅  最后修改于: 2021-10-27 06:34:43             🧑  作者: Mango

Map-Reduce 是一种编程模型,用于处理 Hadoop 中分布式系统上的大型数据集。 Map阶段和Reduce阶段是任何Map-Reduce作业的主要两个重要部分。 Map-Reduce 应用程序受到集群上可用带宽的限制,因为数据从 Mapper 移动到 Reducer。

例如,如果我们的集群中有 1 GBPS(每秒千兆位)的网络,并且我们正在处理数百 PB(Peta 字节)范围内的数据。以超过 1GBPS 的速度移动如此大的数据集需要花费大量时间来处理。组合器用于通过最小化在 Map 和 Reduce 之间混洗的数据来解决这个问题。

在本文中,我们将介绍 Map-Reduce 中的 Combiner,涵盖以下所有方面。

  • 什么是合路器?
  • 合路器的工作原理
  • 合路器的优势
  • 合路器的缺点

什么是合路器?

组合器总是在 Mapper 和 Reducer 之间工作。 Mapper 产生的输出是键值对的中间输出,其大小很大。如果我们直接将这个巨大的输出提供给 Reducer,那么这将导致网络拥塞增加。因此,为了尽量减少这种网络拥塞,我们必须在 Mapper 和 Reducer 之间放置组合器。这些组合器也称为半减速器。没有必要向 Map-Reduce 程序添加组合器,它是可选的。组合器也是我们Java程序中的一个类,就像MapReduce类,用于这个MapReduce类之间。组合器帮助我们生成抽象的细节或非常大的数据集的摘要。当我们处理或处理非常大的数据集时,使用Hadoop Combiner是非常有必要的,从而导致整体性能的提升。

合路器是如何工作的?

MapReduce 组合器

在上面的例子中,我们可以看到两个 Mapper 包含不同的数据。主文本文件分为两个不同的映射器。每个映射器都被分配来处理我们数据的不同行。在我们上面的例子中,我们有两行数据,所以我们有两个映射器来处理每一行。映射器正在生成中间键值对,其中特定单词的名称是,其计数是它的。例如对于数据Geeks For Geeks 对于键值对如下所示。

// Key Value pairs generated for data Geeks For Geeks For 

(Geeks,1) 
(For,1)   
(Geeks,1) 
(For,1)  

Mapper 生成的键值对称为中间键值对或 Mapper 的中间输出。现在我们可以通过在我们的程序中为每个 Mapper 引入一个组合器来最小化这些键值对的数量。在我们的例子中,我们有 4 个由每个 Mapper 生成的键值对。由于这些中间键值对还没有准备好直接提供给 Reducer,因为这会增加网络拥塞,因此Combiner将在将它们发送到 Reducer 之前组合这些中间键值对。组合器根据它们的key组合这些中间键值对。对于上面的数据示例Geeks For Geeks For combiner 将通过根据它们的键值合并相同的对来部分减少它们,并生成新的键值对,如下所示。

// Partially reduced key-value pairs with combiner
(Geeks,2) 
(For,2)   

在Combiner 的帮助下,Mapper 输出的大小(键值对)部分减少,现在可以将其提供给Reducer 以获得更好的性能。现在,Reducer 将再次减少从组合器获得的输出,并生成存储在 HDFS(Hadoop 分布式文件系统)上的最终输出。

合路器的优势

  • 减少将数据从 Mapper 传输到 Reducer 所需的时间。
  • 减少 Mapper 生成的中间输出的大小。
  • 通过最小化网络拥塞来提高性能。

合路器的缺点

  • Mappers 生成的中间键值对存储在本地磁盘上,稍后将运行组合器以部分减少输出,从而导致昂贵的磁盘输入输出。
  • map-Reduce 作业不能依赖于combiner 的函数,因为它的执行没有这样的保证。