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中的