MapReduce算法步骤

计算步骤 :

第1步:InputFormat

InputFormat  到  hdfs  读取数据  将 数据 传给Split

第2步:Split

Split 将数据 进行 逻辑切分, 将数据 传给RR   

第3步:RR

RR : 将传入的 数据 转换成 一行一行 的数据,输出 行首字母偏移量 和 偏移量对应的数据 将数据 传给MAP (偏移量:每个字符移动到当前文档的最前面需要移动的字符个数。)  RR:(Record ,Reader)

第4步:MAP

MAP : 根据业务 需求 实现 自定义代码 将数据 传给 Shufflepartition

第5步:partition

 partition  : 按照一定的分区规则,将key value的 list 进行分区

 将数据 传给Shuffle Sort

第6步:Sort

Sort  对分区内数据 进行排序

将 数据 传给 Shuffle combiner

第7步:combiner

combiner : 对数据进行局部聚合。 将数据传给 Shuffle 的 Group

第8步:Group

Group : 将相同 key 的 key 提取 出来作为 唯一的key,

相同key 对应的 value 获取出来 作为 value  的list

             数据 传给 Reduce

第9步:Reduce

Reduce 根据 业务需求 进行 最终的 合并汇总。

             将 数据 传给 outputFormat

第10步:outputFormat

outputFormat : 将数据写入HDFS.

 

MapReduce算法步骤


小知识:

打包代码到集群运行 在代码中添加  job.setJarByClass(WordCountDriver.class); 打包提交 MAPREDUCE程序的输入:若是一个路径,那么程序会计算路径下的所有文件。 若是一个文件,那么只计算这个文件。 MAPREDUCE程序的输出:输出的路径必须不能存在 Map的数量不能人为设置,reduce的数量可以人为设置 job.setNumReduceTasks(3); reduce数量越多,计算速度越快。 combinner的添加 在map端局部聚和,设置reduce的class job.setCombinerClass(WordCountReduce.class);