大数据面试题之MapReduce(1)

目录

介绍下MapReduce

MapReduce优缺点

MapReduce架构

MapReduce工作原理

MapReduce哪个阶段最费时间

MapReduce中的Combine是干嘛的?有什么好外?

 在MapReduce中,如何根据需要自定义combiner函数?

如何根据具体场景选择合适的combiner函数?

MapReduce为什么一定要有环型缓冲区

MapReduce为什么一定要有Shuffle过程

MapReduce的Shuffle过程及其优化

Reduce怎么知道去哪里拉Map结果集?

Reduce阶段都发生了什么,有没有进行分组

MapReduce Shuffle的排序算法


介绍下MapReduce

MapReduce是一个用于处理和生成大型数据集的编程模型和相关实现,最初由Google提出并在其内部大规模使
用。MapReduce的设计目标是简化在大规模数据集(通常在数千台服务器的集群上)上的并行处理,使开发者无
需深入了解底层分布式系统的细节就能编写并行处理程序。

MapReduce的核心思想基于两个主要阶段:Map(映射)和Reduce(归约)。

Map(映射)
在Map阶段,输入数据集被分割成多个小块,这些小块由不同的Map任务并行处理。每个Map任务读取输入块,然
后使用用户定义的Map函数处理每条输入记录。Map函数将输入的键值对转换为一系列中间键值对。Map函数的输
出被暂时存储,并根据键的哈希值进行分区,准备传递给Reduce阶段。

Reduce(归约)
在Reduce阶段,所有Map任务的输出按照中间键被收集在一起,形成若干个Reduce任务的输入。每个Reduce任
务接收一个中间键以及该键对应的所有值的列表。用户定义的Reduce函数处理这些键值对列表,通常是为了聚合
或汇总数据。Reduce函数的输出是最终结果的一部分,被写入到输出文件中。

特点和优势
1) 易于编程:MapReduce抽象了并行编程的复杂性,开发者只需要实现Map和Reduce函数。
2) 良好的扩展性:MapReduce可以水平扩展,随着节点数量的增加,处理能力也会提升。
3) 高容错性:MapReduce框架会自动处理失败的任务,重新调度它们到其他节点执行。
4) 适合大数据批处理:MapReduce非常适合处理PB级别的数据集,适合离线批处理作业。

限制
1) 实时处理能力弱:MapReduce不适合实时或流式数据处理,因为其处理延迟较高。
2) 不适合迭代计算:MapReduce的Map和Reduce阶段之间没有直接的交互,不适合需要多次迭代的算法。
3) 不适合图计算和机器学习:虽然MapReduce可以用于某些机器学习和图计算任务,但它不是最有效的平台,因为这些任务通常需要更复杂的通信模式。

MapReduce最著名的开源实现是Hadoop的MapReduce框架,它是Hadoop生态系统中的核心组件之一。Hadoop 
MapReduce在大规模数据处理领域有着广泛的应用,尽管近年来随着Spark等更先进的框架出现,MapReduce在
某些领域的地位受到了挑战,但在批处理和大规模数据处理场景中,它仍然是一个非常重要的工具。

MapReduce优缺点

优点:
1) 易于编程:MapReduce通过简单的接口实现分布式程序,使得编程变得非常流行。用户只需实现map和
reduce函数,就可以完成复杂的数据处理任务,无需关心底层的并行和分布式处理细节。
2) 良好的扩展性:MapReduce可以处理大规模的数据集,通过将数据分割为多个小块并进行并行处理,有效地利
用集群的计算资源。当集群资源不能满足计算需求时,可以通过增加节点的方式达到线性扩展集群的目的。
3) 高容错性:MapReduce具有高度的容错性。当某个节点发生故障时,作业可以自动重新分配给其他可用的节点
进行处理,从而保证作业的完成。这种容错性使得MapReduce能够部署在廉价的机器上,并保持稳定运行。
4) 适合PB级以上海量数据的离线处理:MapReduce可以实现上千台服务器集群并发工作,提供强大的数据处理
能力,适用于处理大规模数据集的场景。
5) 并行处理:MapReduce将任务拆分成多个小任务并分配给不同的节点进行处理,从而实现并行处理,提高计算
效率。
6) 简单性:MapReduce的编程模型相对简单,用户只需要关注数据的转换和计算逻辑,而不需要关心并发和分布
式算法的实现细节。
7) 适应性:MapReduce适用于处理大规模数据集的场景,能够高效地处理PB级别甚至EB级别的数据。

缺点:
1) 不擅长实时计算:MapReduce无法像某些数据库系统一样在毫秒或秒级内返回结果,其执行速度相对较慢,普
通的MapReduce作业可能需要几分钟到几个小时甚至一天的时间才能完成。
2) 不擅长流式计算:MapReduce的输入数据集是静态的,不能动态变化,因此不适用于流式计算的场景。
3) 不擅长DAG(有向图)计算:在DAG计算中,多个应用程序存在依赖关系,后一个应用程序的输入为前一个的输出。在这种情况下,MapReduce的性能可能会受到影响,因为每个MapReduce作业的输出结果都需要写入磁盘,这会导致大量的磁盘IO开销。
4) 复杂性:尽管MapReduce提供了高级抽象,但对于开发人员来说,编写和调试MapReduce作业仍然是一项复杂的任务。需要熟悉MapReduce的编程模型和框架,并理解分布式计算的概念和原理。
5) MapReduce过于低层化:对于一些简单的查询任务,使用MapReduce可能过于复杂和低效。例如,一个简单
的查询可能需要编写Map和Reduce函数,这可能会耗费大量时间和精力。在这种情况下,使用更高层次的数据处
理工具(如Hive)可能更为合适。

MapReduce架构

MapReduce 是一种分布式计算框架,其架构主要包括以下几个部分:

1、客户端(Client):提交 MapReduce 作业,并与 JobTracker 进行交互,监控作业的执行进度。

2、JobTracker:是 MapReduce 的主节点,负责作业的调度和监控。它接收客户端提交的作业,将作业分解为
多个任务(Map 任务和 Reduce 任务),并分配给 TaskTracker 执行。同时,它还监控任务的执行状态,重
新调度失败的任务。

3、TaskTracker:运行在从节点上,负责执行由 JobTracker 分配的任务。它会定期向 JobTracker 发送
心跳信息,报告自己的状态以及任务的执行进度。

4、Map 任务:读取输入数据,并按照指定的映射函数进行处理,生成中间键值对。

5、Reduce 任务:接收 Map 任务生成的中间键值对,按照指定的归约函数进行处理,生成最终的输出结果。

在执行过程中,输入数据通常被分割成多个数据块,每个数据块由一个 Map 任务处理。Map 任务生成的中间结
果会根据键进行分区、排序和合并,然后传递给相应的 Reduce 任务进行处理。最终,Reduce 任务的输出结果
被写入到分布式文件系统中。

MapReduce 架构的设计使得大规模数据处理能够在分布式环境中高效、可靠地进行。

MapReduce工作原理

MapReduce的工作原理是围绕着处理大规模数据集而设计的,其核心在于将数据处理任务分解为“Map”和
“Reduce”两个阶段。下面是MapReduce工作流程的详细步骤:

1. 数据切分(Input Splitting)
原始数据首先被切分为多个数据块,每个数据块的大小通常是几百MB到几GB不等。数据切分的目的是为了能够并
行地处理数据,每个数据块都会被分配给集群中的一个节点来处理。

2. Map 阶段
在Map阶段,每个数据块会被独立地处理。Map函数从输入数据中读取记录,并将每条记录转换为键值对的形式。
通常,Map函数的输入是键值对形式的记录,输出也是键值对。Map函数的输出会被缓存和排序,以便后续的
Reduce阶段使用。

3. Shuffle 阶段
Shuffle阶段发生在Map和Reduce阶段之间。在这个阶段,Map函数的输出被重新分布到各个Reduce任务中,这
个过程涉及到对Map输出进行排序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值