MapReduce的shuffle过程图解

4 篇文章 0 订阅
3 篇文章 0 订阅

简介

hadoop系列的学习总结针对的都是hadoop2.6.x版本来说的。
Mapreduce是一个分布式运算程序的编程框架,下面统一将MapReduce简称为mr。

  1. 为什么会出现mr?
    (1) 海量数据在单机上处理因为硬件资源限制,无法胜任。
    (2) 而一旦将单机版程序扩展到集群来分布式运行,将极大增加程序的复杂度和开发难度。
    (3) 引入mapreduce框架后,开发人员可以将绝大部分工作集中在业务逻辑的开发上,而将分布式计算中的复杂性交由框架来处理。

  2. mr框架的结构角色
    (1) MRAppMaster:负责整个程序的过程调度及状态协调。
    (2) MapTask:负责map阶段的整个数据处理流程。
    (3) ReduceTask:负责reduce阶段的整个数据处理流程。


MapReduce的运行模式

  1. 本地运行模式
    (1) mr程序是被提交给LocalJobRunner在本地以单进程的形式运行。
    (2) 而处理的数据及输出结果可以在本地文件系统,也可以在hdfs上。
    (3) 本地模式适合调试,所以开发时一般利用本地模式测试后再在集群上跑。
    (4) 如果在windows下想运行本地模式来测试程序逻辑,需要在windows中配置环境变量:
    %HADOOP_HOME% = d:/hadoop-2.6.4
    %PATH% = %HADOOP_HOME%\bin
    并且要将d:/hadoop-2.6.4的lib和bin目录替换成windows平台编译的版本(注意32位和64位不通用)

  2. 集群运行模式
    (1) 将mr程序提交给yarn集群resourcemanager,分发到集群节点上并发执行
    (2) 处理的数据和输出结果应该位于HDFS文件系统
    (3) 将程序打成JAR包,然后在集群的任意一个节点上用hadoop命令启动


MapReduce的shuffle原理

maptask的任务分配(切片)机制

  1. 将待处理数据执行逻辑切片(即按照一个特定切片大小,将待处理数据划分成逻辑上的多个split),然后每一个split分配一个mapTask并行实例处理。

  2. 遍历输入目录下的文件,得到切片规划描述文件(由splitsList(split([文件路径、切片编号、偏移量的范围]))序列化生成),由FileInputFormat实现类的getSplits()方法完成。

  3. 在FileInputFormat中,计算切片大小的逻辑:
    Math.max(minSize, Math.min(maxSize, blockSize))
    -minsize:默认值:1
    -maxsize:默认值:Long.MAXValue
    -因此,默认情况下,切片大小=blocksize

mr的shuffle原理

  1. mr中,map阶段处理的数据如何传递给reduce阶段,是mr框架中最关键的一个流程,这个流程就叫shuffle。
  2. 具体来说:就是将maptask输出的处理结果数据,分发给reducetask,并在分发的过程中,对数据按key进行了分区和排序。
  3. shuffle流程解析
    (1)map task通过InputFormat中的RecordReader中的read()方法来读文件,一次读取一行,这里注意,mr默认将输出文件按照128M一个切片来进行处理,有多少个切片就启动多少个map tast来处理。

    (2) map task中通过context.write()方法将数据写入到OutputCollector收集器中,然后再写入到一个环形缓冲区(底层实现是一个数组,默认100M)中,默认写到80%就开始做清理工作,前面写着,后面有个进行清理,将数据溢出到文件中。

    (3) 文件中的数据分区且区内有序。然后启动相应分区数量的reduce,将每个reduce将所有map task产生文件对应的分区的数据下载到本地工作目录后合并(例如reduce1对应1号分区,它会将所有map task产生的文件中对应的1号分区的数据拿过来),通过归并排序,各个reduce中的数据是有序的。

    (4) 根据GroupingComparator对kv聚合成组,默认实现是k相同则认为是一组,对每一组调用reduce()方法,将这一组的k传给reduce中的参数key,将这一组的v的迭代器传给reduce的参数values。然后通过context.write()方法将数据写入到文件。

    (5) mr工作机制需要注意的是map的数量和reduce的数量是由什么决定的。还有就是mr中的分区,排序及自定义分组,关于这部分内容下一篇学习总结中会具体来说。

  4. shuffle流程图解

    因为图太大了,所以分开来画。

    (1)
    这里写图片描述

    (2)
    这里写图片描述

    注:maptask的数量由文件大小决定,而reduce的数量可以自己设置。

    下一篇将介绍mr的自定义分区,自定义排序及自定义分组的相关学习总结。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值