一、MapReduce概念
- Mapreduce是一个分布式运算程序的编程框架,是用户开发“基于hadoop的数据分析应用”的核心框架;
- Mapreduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个hadoop集群上。
二、MapReduce的编程思想
三、MapReduce进程
一个完整的mapreduce程序在分布式运行时有三类实例进程:
- 1)MrAppMaster:负责整个程序的过程调度及状态协调
- 2)MapTask:负责map阶段的整个数据处理流程
- 3)ReduceTask:负责reduce阶段的整个数据处理流程
四、MapReduce编程规范
用户编写的程序分成三个部分:Mapper,Reducer,Driver(提交运行mr程序的客户端)
- Mapper阶段
- (1)用户自定义的Mapper要继承自己的父类
- (2)Mapper的输入数据是KV对的形式(KV的类型可自定义)
- (3)Mapper中的业务逻辑写在map()方法中
- (4)Mapper的输出数据是KV对的形式(KV的类型可自定义)
- (5)map()方法(maptask进程)对每一个<K,V>调用一次
- Reducer阶段
- (1)用户自定义的Reducer要继承自己的父类
- (2)Reducer的输入数据类型对应Mapper的输出数据类型,也是KV
- (3)Reducer的业务逻辑写在reduce()方法中
- (4)Reducetask进程对每一组相同k的<k,v>组调用一次reduce()方法
- Driver阶段:整个程序需要一个Drvier来进行提交,提交的是一个描述了各种必要信息的job对象
详见【大数据案例(一)——MapReduce实现WordCount】
五 MapReduce程序运行流程分析
- 1)在MapReduce程序读取文件的输入目录上存放相应的文件。
- 2)客户端程序在submit()方法执行前,获取待处理的数据信息,然后根据集群中参数的配置形成一个任务分配规划。
- 3)客户端提交job.split、jar包、job.xml等文件给yarn,yarn中的resourcemanager启动MRAppMaster。
- 4)MRAppMaster启动后根据本次job的描述信息,计算出需要的maptask实例数量,然后向集群申请机器启动相应数量的maptask进程。
- 5)maptask利用客户指定的inputformat来读取数据,形成输入KV对。
- 6)maptask将输入KV对传递给客户定义的map()方法,做逻辑运算
- 7)map()运算完毕后将KV对收集到maptask缓存。
- 8)maptask缓存中的KV对按照K分区排序后不断写到磁盘文件
- 9)MRAppMaster监控到所有maptask进程任务完成之后,会根据客户指定的参数启动相应数量的reducetask进程,并告知reducetask进程要处理的数据分区。
- 10)Reducetask进程启动之后,根据MRAppMaster告知的待处理数据所在位置,从若干台maptask运行所在机器上获取到若干个maptask输出结果文件,并在本地进行重新归并排序,然后按照相同key的KV为一个组,调用客户定义的reduce()方法进行逻辑运算。
- 11)Reducetask运算完毕后,调用客户指定的outputformat将结果数据输出到外部存储。