两个核心函数Map、Reduce
MapReduce的体系结构
TaskTracker是以什么方式衡量资源使用情况?
在MapReduce设计中,TaskTracker是使用一种槽slot的概念:
先划分:TaskTracker使用slot把机器上的CPU、内存等资源进行等量划分,分成大小相同的slot。
再调度:将各个TaskTracker上空闲的slot分配给task(maptask、reducetask)使用
启动:TaskTracker启动maptask、reducetask
MapReduce工作流程
1、工作流程概述:
数据分块存储到不同的HDFS机器节点上--->把大数据集分片操作split
每一个小分片单独启动一个map()任务,去负责处理该分片
map()任务的输入<key,value>,输出list<key,value>,这些输出的list<key,value>要
“经过shuffle处理”,shuffle处理完之后才发送到不同的reduce()机器上进行后续的并行处理,
reduce()处理后,输出到HDFS
见下图所示:
2、MapReduce各个执行阶段
先通过InputFormat进行加载文件中的数据(InputFormat工作:输入进行格式验证;逻辑切分split)
RR:记录阅读器RecordReader
MapReduce的核心:shuffle过程
【说明】:一个shuffle过程包括map中的shuffle和reduce中的shufle
【过程简介】:
数据是保存在分布式文件系统HDFS中的,是从分布式文件系统HDFS中输入数据;
输入完之后进行分片处理,每个分片交给map任务,map任务包含用户对数据的处理逻辑,
map处理结束后生成很多的键值对,这些键值对不是直接发送给reduce,也不是直接写入磁盘,
而是先写入缓存中去,当缓存被写满的时候,发生溢写,在混村的数据写入磁盘的过程中会
发生(分区、排序、合并),把(分区、排序、合并)后的数据写入到磁盘文件中。
因此,写入到磁盘中的数据是(分区、排序、合并之后的)的大文件,生成的该大文件之后会
通知reduce任务取走。
---------------------------------------------------
reduce任务会取走属于自己的对应的分区中的数据,执行归并,之后再输入给reduce()函数,
reduce()函数中有用户写好的处理数据的逻辑,处理完成后进行输出,输出给
分布式文件系统HDFS
图示见下: