一、概述
- MapReduce是一种分布式计算模型
- 由谷歌提出,基于GFS进行设计,主要用于搜索领域中解决海量数据的计算问题
- Doug Cutting根据《MapReduce: Simplified Data Processing on Large Clusters》设计实现了Hadoop中基于HDFS的MapReduce
- MapReduce是由两个阶段组成:Map和Reduce,用户只需要实现map以及reduce两个函数,即可实现分布式计算,这样做的目的是简化分布式程序的开发和调试周期
- MapReduce中包含的节点:JobTracker和TaskTracker
二、组成
- JobTracker/ResourceManager:任务调度者,管理多个TaskTracker。ResourceManager是Hadoop2.0版本之后引入Yarn之后用于替代JobTracke部分功能的机制
- TaskTracker/NodeManager:任务执行者
- Hadoop2.0后,组件转换:
三、结构图
- 从HDFS中获取数据
- MapReduce首先会将输入的数据进行逻辑切片,每一个接片是一个InputSplit对象
- 每一个InputSplit对象会交给一个MapTask来执行
- 切片中的每一行数据都会触发一次map方法,
- map方法的输入的键默认为数据偏移量,输入的值为这一行的数据;输出的键以及值的类型根据业务确定
- 在Barrier阶段,会将所有相同的键所对应的值放入一个ArrayList中,然后产生一个迭代器交给ReduceTask来执行
- 在ReduceTask中,每一个键都会触发一次reduce方法
- 将结果写到HDFS中