Hadoop 中的 MapReduce 是什么?大数据架构

Hadoop中的MapReduce是什么?

MapReduce是一个软件框架和编程模型,用于处理海量数据。MapReduce程序分为两个阶段:Map和Reduce。Map任务负责拆分和映射数据,而Reduce任务负责混洗和缩减数据。

Hadoop能够运行用多种语言编写的MapReduce程序:Java、Ruby、Python和C++。云计算中的Map Reduce程序具有并行性,因此非常适合使用集群中的多台机器执行大规模数据分析。

每个阶段的输入都是键值对。此外,每个程序员都需要指定两个函数:map函数reduce函数

大数据中MapReduce架构(附示例说明)

整个过程经过四个执行阶段:拆分、映射、混洗和缩减。

在本MapReduce教程中,让我们通过一个MapReduce示例来理解——

假设您的MapReduce在大数据程序中有以下输入数据:

Welcome to Hadoop Class
Hadoop is good
Hadoop is bad
MapReduce Architecture
MapReduce架构

MapReduce任务的最终输出是

bad 1
1
good 1
Hadoop 3
2
to 1
Welcome 1

数据将通过以下MapReduce在大数据中的阶段:

输入拆分

MapReduce在大数据作业中的输入被划分为固定大小的块,称为输入拆分。输入拆分是由单个Map消耗的输入块。输入拆分是MapReduce中用于处理大数据的输入块。

映射

这是Map-Reduce程序执行的第一个阶段。在此阶段,每个拆分中的数据将传递给映射函数以生成输出值。在我们的示例中,映射阶段的任务是计算输入拆分中每个单词的出现次数(下面将提供输入拆分的更多详细信息),并以<单词,频率>的形式准备列表。

混洗

此阶段消耗Map阶段的输出。其任务是从Map阶段的输出中整合相关记录。在我们的示例中,相同的单词及其各自的频率被分组。

缩减

在此阶段,对混洗阶段的输出值进行聚合。此阶段合并来自混洗阶段的值并返回单个输出值。简而言之,此阶段对整个数据集进行摘要。

在我们的示例中,此阶段聚合了来自混洗阶段的值,即计算每个单词的总出现次数。

MapReduce架构详解

  • 为每个拆分创建一个Map任务,然后该任务为拆中的每个记录执行map函数。
  • 拥有多个拆分总是很有益的,因为处理拆分所需的时间与处理整个输入所需的时间相比很短。当拆分较小时,由于我们并行处理拆分,因此加载平衡的处理效果更好。
  • 然而,拆分过小也是不可取的。当拆分过小时,管理拆分和创建Map任务的开销开始主导整个作业执行时间。
  • 对于大多数作业,最好将拆分大小设置为与HDFS块大小(默认为64 MB)相同。
  • Map任务的执行会将输出写入相应节点上的本地磁盘,而不是HDFS。
  • 选择本地磁盘而不是HDFS的原因是避免HDFS存储操作中发生的复制。
  • Map输出是中间输出,由Reduce任务处理以生成最终输出。
  • 作业完成后,Map输出可以被丢弃。因此,将其存储在带有复制的HDFS中就显得多余了。
  • 在节点发生故障时,在Map输出被Reduce任务消耗之前,Hadoop会在另一个节点上重新运行Map任务并重新创建Map输出。
  • Reduce任务不遵循数据局部性的概念。每个Map任务的输出都馈送到Reduce任务。Map输出被传输到运行Reduce任务的机器上。
  • 在这台机器上,输出被合并,然后传递给用户定义的reduce函数。
  • 与Map输出不同,Reduce输出存储在HDFS中(第一个副本存储在本地节点上,其他副本存储在机架外的节点上)。因此,写入Reduce输出

MapReduce如何组织工作?

现在,在本MapReduce教程中,我们将学习MapReduce的工作原理。

Hadoop将作业划分为任务。有两种类型的任务:

  1. Map任务(拆分和映射)
  2. Reduce任务(混洗、缩减)

如上所述。

完整的执行过程(Map和Reduce任务的执行)由两种类型的实体控制,称为

  1. Jobtracker:充当主节点(负责提交作业的完整执行)
  2. 多个Task Trackers:充当从属节点,每个节点执行作业

对于提交到系统执行的每个作业,都有一个位于Namenode上的Jobtracker,以及位于Datanode上的多个tasktrackers

How Hadoop MapReduce Works
Hadoop MapReduce如何工作
  • 一个作业被划分为多个任务,然后这些任务在集群中的多个数据节点上运行。
  • Job tracker负责通过调度任务在不同数据节点上运行来协调活动。
  • 各个任务的执行由位于每个数据节点上的Task tracker负责,该节点执行作业的一部分。
  • Task tracker的职责是向Job tracker发送进度报告。
  • 此外,Task tracker会定期向Jobtracker发送“心跳”信号,以通知其系统的当前状态。
  • 因此,Job tracker会跟踪每个作业的整体进度。在任务失败的情况下,Job tracker可以在另一个Task tracker上重新调度它。