一、mapTask调用InputFormat再调用RecourReader的read()方法来读取数据,得到key、value,mapreduce经过InputFormat来解耦
二、read()方法依靠一次读取一行的逻辑来读取原始文件的数据,返回key、value,mapTask会将其交给自定义的Mapper
三、map方法咱们会调用context.write方法来输出数据到OutPutCollector类,OutPutCollector会将数据放到(内存中存放 默认MR.SORT.MB:100MB能够本身配置,通常不会放满默认80%,这里面还要留有空间排序默认20%)环形缓冲区(其实就是一个bite()数组,若是写满了,那么就会一边写一边将开始的数据回收,而后继续写到回收后的位置上,造成了环形缓冲区)
四、环形缓冲区的溢出的数据溢出以前会经过Hashpartioner进行分区、排序(默认是快速排序法key.compareTO),会经过spiller写入到mapTask工做目录的本地文件(全部溢写文件分区且区内有序)
五、全部溢出的文件会作归并排序造成mapTask的最终结果文件,一个mapTask对应一个最终结果文件,造成几个分区就会有对应几个reduceTask。reduceTask的个数由配置文件或者参数设置,只要不设置自定义partitioner,那么这里的分区会动态适配reduceTask个数。若是设置了自定义partitioner,那么就须要提早设置对应的reduceTask的个数
六、每一个reduceTask都会到每个mapTask的节点去下载分区文件到reduceTask的本地磁盘工做目录
七、为了保证最后的结果有序,reduceTask任务A须要再次从全部mapTask下载到的对应文件从新进行归并排序
八、reduceTask的内部逻辑写在reducer的reduce(key,values)方法,经过调用GroupingComparaor(key,netxtk)或者自定义GroupingComparaor来判断哪些key是一组,造成key和values。
九、reducer的reduce方法最后经过context.writer(key,v)写到输出文件(全部reduceTask的输出文件都有序),输出路径由提交任务时的参数决定,默认文件名part-r-00000
十、若是设置了combiner,那么溢写排序文件会调用,归并排序时也会combiner,将加快shluffer的效率,可是通常状况下不建议使用,若是符合条件下必定要使用,也能够直接指定reducer为combiner,不必重复写代码数据库
map reduce编程模型:把数据运算流程分为2个阶段编程
阶段1:读取原始数据,造成key-value数据(map方法)数组
阶段2:将阶段1的key-value数据按照相同的key分组聚合(reduce方法)app
mapreduce编程模型的具体实现(软件):Hadoop中的mapreduce框架;spark框架
hadoop中的mapreduce框架:oop
对编程模型阶段1的实现就是:map taskspa
map task:.net
读数据:InputFormat-->TextInputFormat:读文本文件orm
-->SequenceFileInputFormat:读Sequence文件对象
-->DBInputFormat:读数据库
处理数据:map task经过调用Mapper类的map()方法实现对数据处理
分区:将map阶段产生的key-value数据,分发给若干个reduce task来分担负载,
map task调用Partitionner类的getPartition()方法来决定如何划分数据给不一样的reduce task
对编程模型阶段2的实现就是:reduce task
对key-value数据排序:调用key.compareTo()方法来实现对key-value数据排序
reduce task:
读数据:经过HTTP方式从maptask产生的数据文件中下载属于本身的“区”的数据到本地磁盘,
而后将多个同区文件(作合并,归并排序)
处理数据:经过调用GroupingComparator的compare()方法来判断文件中的哪些key-value
属于同一组,而后将这一组数据传给Reducer类的reduce()方法聚合一次
输出结果:调用OutPutFormat组件将结果key-value数据写出去
OutputFormat-->TextOutputFormat:写文本文件(一对key-value写一行。分隔符号\t)
-->SequenceFileOutputFormat:写Sequence文件(直接将key-value对象序列化到文件中)
-->DBOutputFormat