MapReduce工作流程概述

Mapreduce工作流程概述
在这里插入图片描述

HDFS以固定大小的block为基本单位存储数据,而对于mapreduce而言,其处理单位为split;split是一个逻辑概念,它只包含一些元数据信息,如数据起始位置,数据长度,数据所在节点等,它的划分方法完全由用户自己决定

Map任务数量
 Hadoop为每个split创建一个map任务,split多少决定了map任务的数目
 大多数情况下,理想的分片大小是一个hdfs块
在这里插入图片描述

注意:每个block不是严格分为128MB,而是有上下10%左右的偏差
Reduce任务数量
 默认为1
 可以设置

Mapreduce处理模型
 Hadoop mapreduce数据流

  • 使用单个reduce task的数据流

在这里插入图片描述

  • 使用多个reduce task数据流
    在这里插入图片描述

  • 没有reduce task的数据流
    在这里插入图片描述

在这里插入图片描述

 现在通常不用mapreduce做分析,而是用mapreduce做数据清洗,用hive做分析

  1. Shuffle过程(重点
    在这里插入图片描述

 Map端从计算结果出来后,不会直接进入内存中,而实会先进入缓存区,这个缓存区默认是100mb,其阈值是80%,当缓存得数据写到80mb左右时,它会将数据落到磁盘当中,这个过程叫spill to disk(溢写到磁盘中);
 之后在传输到reduce前,会将这些所有的溢写文件进行一个合并排序,即进行一个归并将其变为一个文件
 Reduce会不断进行轮巡yarn组件中的master manager,即进行监控map执行记录,一旦map执行结束,reduce就会将这个文件分批下载到本地(fetch)进行合并
 在reduce中,会将文件边拉边合并,如果内存能放下就放,放不下也会溢写到磁盘当中
 最后完成后,这些文件再会一起发给reduce,reduce会进行逻辑处理,处理完再生成一个output

重点:Shuffle这里有分区和排序,溢写到磁盘,先有分区,再有排序
注意:Mapreduce大部分时间消耗都在shuffle的过程,因为溢写的过程是一个不断往磁盘IO的过程,因此在优化时如果减少溢写的过程,那么将极大改善性能,方法有提高缓存的空间,将其从默认的100mb提高到1个g;其他方法还有根据业务修改shuffle排序规则

  1. Shuffle过程详解
    在这里插入图片描述
    在这里插入图片描述