Hadoop MapReduce 介绍

请添加图片描述

MapReduce核心思想

MapReduce的核心思想就是‘分而治之’,但是不可拆分的计算任务或着互相有依赖任务的数据进行计算

设计构思

MapReduce可以被分为两个阶段:Map阶段(拆分)和Reduce(合并阶段)

MapReduce处理的数据类型是键值对

MapReduce最大的优点就是对隐藏了很多底层代码的细节

什么是MapReduce

MapReduce最早出现在Google于2004年在一篇名为《MapReduce:Simplified Data Processingon Large Clusters 》的论文中被提出

MapReduce是一种分布式计算框架,那什么是分布式计算呢?

分布式计算是将该应用分解成许多小的部分,分配给多台计算机进行处理,以达到提交计算效率的目的,减少大规模数据计算的时间。

MapReduce是面向超大规模数据设计的一种计算框架,如果我们用MapReduce处理小规模数据的化还不如不用,会起到适得其反的作用,

MapReduce的特点

1、易于编程

Mapreduce框架提供了用于二次开发的接口,可以让使用它的用户很简单的利用这些简单的接口实现集群的部署,其他的交给计算框架进行处理

2、具有良好的扩展性

当已经加入计算的计算机资源不能够满足计算的时候框架会通过增加机器的方式来提高和扩展他的计算能力

3、具有很高的容错性

我们的Hadoop集群是分布式搭建和部署得,当部署的集群中如果有任何一台机器因为故障宕机,它会把这个计算机上的计算任务交给其他的计算机继续进行计算任务,以保证我们的整体计算任务的完成。

4、适用海量的数据的离线处理

可以计算很高级别的数据量(GB\TB\PB)(但是不可以用于计算流式数据)

MapReduce的不足(局限性)

实时计算性能差

在优点的时候我们就有写到,它可以计算很高级别的数据量,但是它不能够用于流式数据的计算,只能对静态的数据进行计算,虽然可以进行计算但是由于MapReduce的复杂的计算方式,他的计算方式会非常的慢

MapReduce组成

MRAppMaster:负责整个MR程序的过程调度及状态协调 (有且只能有一个)

MapTask:负责map阶段的整个数据处理流程 (根据计算的数据量可以有多个)

ReduceTask:负责reduce阶段的整个数据处理流程(根据计算的数据量可以有多个)

一个MapReduce编程模型中只能包含一个Map阶段和一个Reduce阶段,或者只有Map阶段;也就是说出现Map阶段和Reduce阶段不是成对出现的,要不然就是只有一个map阶段,map阶段或者Reduce阶段不能够连续出现

MapReduce数据类型:是以kv键值对的形式流转、传递的,类似于字典

Hadoop MapReduce实现流程

具体的程序运行就不给大家演示了

这个是WordCount编程实现思路
请添加图片描述
请添加图片描述

map阶段的核心:把输入的数据经过切割,全部标记1,因此输出就是<单词,1>。

shuffle阶段核心:经过MR程序内部自带默认的排序分组等功能,把key相同的单词会作为一组数据构成新的kv对 。

reduce阶段核心:处理shuffle完的一组数据,该组数据就是该单词所有的键值对。对所有的1进行累加求和,就是 单词的总次数

map阶段执行过程

1、将要进行计算的文件按照设置的标准进行切片默认Split size = Block size(128M)形成一块一块的切片后交给MapTask处理

2、对切片中的数据进行解读。

3、调用Mapper类中的map方法处理数据

4、按照一定的规则对Map输出的键值对进行分区partition

5、Map输出数据写入内存缓冲区,达到比例溢出到磁盘上

6、将内存缓冲区的溢出的数据进行合并,最终合并成一个文件

Reduce阶段执行过程

1、ReduceTask会主动从MapTask复制拉取属于需要自己处理的数据

2、将拉取的数据,进行合并合并成一个大的数据文件,然后在进行数据的整理排序

3、对排序后的键值对调用reduce方法。键相等的键值对调用一次reduce方法,最后将这些键值对进行存储

Shuffle机制

从Map产生输出开始到Reduce取得数据作为输入之前的过程称作shuffle
Shuffle在整个MapReduce执行流程图的位置
请添加图片描述

shuffle是MapReduce程序的灵魂,最核心、最重要的机制

指的是将map端的无规则的数据按照某种规则进行整理,以便reduce端接收处理。

shuffle机制弊端:频繁涉及到数据在内存、磁盘之间的多次往复。

Map端Shuffle

Map端Shuffle在整个MapReduce执行流程图的位置

可以说已经占到了maptask 的绝大部分内容了
请添加图片描述
Collect阶段:将MapTask的结果收集输出到默认大小为100M的环形缓冲区,保存之前会对key进行分区的计算, 默认Hash分区。

Spill阶段:当内存中的数据量达到一定的阀值的时候,就会将数据写入本地磁盘,在将数据写入磁盘之前需要对数 据进行一次排序的操作,如果配置了combiner,还会将有相同分区号和key的数据进行排序。

Merge阶段:把所有溢出的临时文件进行一次合并操作,以确保一个MapTask最终只产生一个中间数据文件。

Reducer端的shuffle

Reducer端shuffle在整个MapReduce执行流程图的位置

在Reduce task 也占据有很大的分量
请添加图片描述

Copy阶段: ReduceTask启动Fetcher线程到已经完成MapTask的节点上复制一份属于自己的数据。

Merge阶段:在ReduceTask远程复制数据的同时,会在后台开启两个线程对内存到本地的数据文件进行合并操作 。

Sort阶段:在对数据进行合并的同时,会进行排序操作,由于MapTask阶段已经对数据进行了局部的排序, ReduceTask只需保证Copy的数据的最终整体有效性即可

愿君前程似锦,未来可期去💯,感谢您的阅读,如果对您有用希望您留下宝贵的点赞和收藏
本文章为本人学习笔记,学习网站为黑马程序员的Hadoop可以一起学习共同进步谢谢,如有请侵权联系,本人会立即删除侵权文章。可以一起学习共同进步谢谢,如有请侵权联系,本人会立即删除侵权文章。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿龙的代码在报错

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值