MapReduce机制原理
1、MapReduce概述
Hadoop MapReduce是一个分布式计算框架
,用于轻松编写分布式应用程序,这些应用程序以可靠,容错的方式并行处理大型硬件集群(数千个节点)上的大量数据(多TB数据集);
- 一个最终完整版本的MR程序需要
用户编写的代码
和Hadoop自己实现的代码
整合在一起才可以; - 其中用户
负责
map、reduce两个阶段的业务问题
,Hadoop负责
底层所有的技术问题
; - 由于MapReduce计算引擎天生的弊端(慢),当下企业中直接使用率已经日薄西山了,所以在企业中工作很少涉及到MapReduce直接编程,但是某些软件的背后还依赖MapReduce引擎
2、MapReduce特点
特点 | 内容 |
---|---|
易于编程 | Mapreduce框架提供了用于二次开发的接口,方便用户使用和开发 |
扩展性强 | 资源不够用的情况下,可以快速扩容,增加节点 |
高容错性 | 分布式搭建和部署,任何单一机器节点宕机,不影响整个作业任务得完成。 |
处理海量离线数据 | 可以处理GB、TB和PB级别的数据量 |
3、MapReduce局限性
局限性 | 内容 |
---|---|
实时计算性能差 | MapReduce主要应用于离线作业,无法作到秒级或者是亚秒级得数据响应。 |
不能流式计算 | 流式计算特点是数据源源不断的计算,也就是说数据是动态的;而MapReduce作为一个离线计算框架,主要是针对静态数据集,数据是不能动态变化的。 |
4、Map Task
5、Map 阶段步骤:
第一阶段:把输入目录下文件按照一定的标准逐个进行逻辑切片,形成切片规划。默认Split size = Block size(128M)
,每一个切片由一个MapTask处理。(getSplits)
第二阶段:对切片中的数据按照一定的规则读取解析返回<key,value>键值对
。默认是按行读取数据
。key是每一行的起始位置偏移量,value是本行的文本内容。(TextInputFormat)
第三阶段:调用Mapper类中的map方法处理数据。每读取解析出来的一个<key,value> ,调用一次map方法Reduce Task
;
第四阶段:按照一定的规则对Map输出的键值对进行分区partition
。默认不分区,因为只有一个reducetask。分区的数量就是reducetask运行的数量。
第五阶段:Map输出数据写入内存缓冲区
,达到比例溢出到磁盘
上。溢出spill的时候根据key进行排序sort。默认根据key字典序排序。
第六阶段:对所有溢出文件进行最终的merge合并
,成为一个文件。
6、Reduce 阶段步骤:
第一阶段:ReduceTask会主动从MapTask复制拉取属于
需要自己处理的数据。
第二阶段:把拉取来数据,全部进行合并merge
,即把分散的数据合并成一个大的数据。再对合并后的数据排序。
第三阶段是对排序后的键值对调用reduce方法
。键相等的键值对调用一次reduce方法。最后把这些输出的键值对写入到HDFS文件中。