14mapreduce的流程说明&实现Mapper类--类的泛型参数说明&0实现Driver以及测试运行——好程序

mapreduce核心名词
job:用户的一个计算请求称为一个作业。
task:每一个作业,都需要分拆成多个的task,交由多个主机来完成,拆分出来的执行单元就叫任务。
task又分为3种类型:
map:负责map阶段的整个的数据处理流程(需要资源)
reduce:负责reduce阶段的整个数据处理流程(需要资源)
appMaster:负责整个程序的过程调度以及状态协调(需要资源,ResourceManager首先分给它)

mapreduce的程序运行流程
1、一个mr程序启动的时候,最先启动的时mrAppMaster,mrAppmaster启动后根据本次job的描述信息(job:split分片信息),计算出需要的maptask的实例数量,然后向集群申请机器来启动maptask任务。
2、maptask任务启动之后,根据给定的数据切片范围进行数据处理,主要流程:
    根据客户端指定的inputformat来获取recordreader来读取数据,形成输入kv对。
    将输入的kv对传递给客户自定义的map方法,做逻辑运算,并将map方法的输出的kv对进行收集到缓存。
    
  将缓存中的kv对按照k进行分区排序后不断的溢写到磁盘文件(什么样的数据分到哪个reduce里面)
   到此maptask任务已经完成了
3、mrappmaster监控所有的maptask任务完成情况,会根据客户指定的参数启动相应数量的reduce任务,把那个告知reducetask要处理的数据范围(数据分区)(reduce任务是客户端人为指定的,数据分成多少个task,就会分成多少个分区)

4、reducetask任务启动之后,根据mrappmaster告知的数据范围所在的位置,从若干台maptask运行的主机上获取若干个maptask的输出结果文件,并在本机进行重新归并排序。然后按照相同key的kv分为一组(有多少k就分多少组),调用客户定义的reduce方法(业务逻辑),进行逻辑运算,并将运算结果输出成kv,然后调用客户指定的outputformat将结果输出到外部存储设备。

(map将资源分到磁盘的分区里,然后reduce被告知所做的任务,及任务所在的磁盘文件位置信息,则就可以主动去拉去资源)

编写一个mapreduce程序编程步骤(框架都是接口,只要将写好的程序放入接口里)
01、用户编程的程序分成三个部分:Mapper、Reducer、Driver(提交mr程序的客户端,Driver是驱动程序)
02、Mapper的输入数据是KV对形式(KV的类型可以自定义)
03、Mapper的输出数据是KV对形式(KV的类型可以自定义)
04、Mapper中的业务逻辑写在map方法中(对一整行数据进行拆分,然后数组迭代,再进行一个单词一个数量统计)
05、map方法(由maptask进程来调用)对每一个KV对调用一次map方法
06、reduce的输入数据是KV对形式,数据类型对应的是map阶段的输出数据类型
07、reducer的业务逻辑写在reduce方法中
08、reducetask进程对每一组相同key的kv键值对数据分成一组,调用一次reduce方法        到此,功能的角度已经完成了
09、用户自定义的Mapper和Reducer类都要继承各自的父类。          这里是框架的角度来看
10、整个程序需要一个Driver来执行提交,提交的是一个描述了各种必要信息的job对象(job里面要设置相应的属性)

需求:下面数据有很多文件,将数据放到目录里面,将目录传给程序就OK了

hello world
hello qianfeng
hello gp1923
hello java
hello hadoop
hello cls
hello ma
hello hai

1233211234567

map的输出:
hello,14
world,1
hello,1
qianfeng,1
hello,1
gp1923,1
hello,1
java,1
hello,1
hadoop,1
hello,1
cls,1
hello,1
ma,1
hello,1
hai,1

排序之后的数据:
cls,1
gp1923,1
hadoop,[1]
hai,[1]
hello,[1,1,1,1,1,1,1,1]
java,1
ma,1
qianfeng,1
world,1

0分区
caijincun    1
gp1923    1
qianfeng    1
zhouzhiduo    1

1分区
laozhaotou    1

3分区
cls    [1,1]
hadoop    1
hello,1 hello,1 hello,1...    [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
world    1
 

发布了204 篇原创文章 · 获赞 16 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/penghao_1/article/details/104422347