MapReduce算法步骤
计算步骤 :
InputFormat 到 hdfs 上 读取数据 将 数据 传给Split
Split 将数据 进行 逻辑切分, 将数据 传给RR
RR : 将传入的 数据 转换成 一行一行 的数据,输出 行首字母偏移量 和 偏移量对应的数据 将数据 传给MAP (偏移量:每个字符移动到当前文档的最前面需要移动的字符个数。) RR:(Record ,Reader)
MAP : 根据业务 需求 实现 自定义代码 将数据 传给 Shuffle 的 partition
partition : 按照一定的分区规则,将key value的 list 进行分区。
将数据 传给Shuffle 的 Sort
Sort : 对分区内 的 数据 进行排序
将 数据 传给 Shuffle 的 combiner
combiner : 对数据进行局部聚合。 将数据传给 Shuffle 的 Group
Group : 将相同 key 的 key 提取 出来作为 唯一的key,
将 相同key 对应的 value 获取出来 作为 value 的list
将 数据 传给 Reduce
Reduce : 根据 业务需求 进行 最终的 合并汇总。
将 数据 传给 outputFormat
outputFormat : 将数据写入HDFS.
小知识:
打包代码到集群运行 在代码中添加 job.setJarByClass(WordCountDriver.class); 打包提交 MAPREDUCE程序的输入:若是一个路径,那么程序会计算路径下的所有文件。 若是一个文件,那么只计算这个文件。 MAPREDUCE程序的输出:输出的路径必须不能存在 Map的数量不能人为设置,reduce的数量可以人为设置。 job.setNumReduceTasks(3); reduce数量越多,计算速度越快。 combinner的添加 在map端局部聚和,设置reduce的class job.setCombinerClass(WordCountReduce.class);