MapReduce经典案例-TopN

1.TopN分析法介绍

TopN分析法是指从研究对象中按照某一个指标进行倒序或正序排列,取其中所需的N个数据,并对这N个数据进行重点分析的方法。

2.案例需求及分析

现假设有数据文件num.txt,现要求使用MapReduce技术提取上述文本中最大的5个数据,并最终将结果汇总到一个文件中。

(1) 先设置MapReduce分区为1,即ReduceTask个数一定只有一个。我们需要提取TopN,即全局的前N条数据,不管中间有几个MapReduce,最终只能有一个用来汇总数据。

(2) Map阶段,使用TreeMap数据结构保存TopN的数据,TreeMap默认会根据其键的自然顺序进行排序,也可根据创建映射时提供的 Comparator进行排序,其firstKey()方法用于返回当前集合最小值的键(正序)。

(3) Reduce阶段,将Map阶段输出数据进行汇总,选出其中的TopN数据,即可满足需求。这里需要注意的是,TreeMap默认采取正序排列,需求是提取5个最大的数据,因此要重写Comparator类的排序方法进行倒序排序。

1.Map阶段实现

使用Eclipse开发工具打开之前创建的Maven项目HadoopDemo,并且新建cn.itcast.mr.topN包,在该路径下编写自定义MapperTopNMapper,主要用于将文件中的每行数据进行切割提取,并把数据保存到TreeMap中,判断TreeMap是否大于5,如果大于5就需要移除最小的数据。TreeMap保存了当前文件最大5条数据后,再输出到Reduce阶段。

2.Reduce阶段实现

根据Map阶段的输出结果形式,同样在cn.itcast.mr.topN包下,自定义ReducerTopNReducer,主要用于编写TreeMap自定义排序规则,当需求取最大值时,只需要在compare()方法中返回正数即可满足倒序排列,reduce()方法依然是要满足时刻判断TreeMap中存放数据是前五个数,并最终遍历输出最大的5个数。

3.Driver程序主类实现

编写MapReduce程序运行主类TopNDriver,主要用于对指定的本地D:\\topN\\input目录下的源文件(需要提前准备)实现TopN分析,得到文件中最大的5个数,并将结果输入到本地D:\\topN\\output目录下。

4.效果测试

为了保证MapReduce程序正常执行,需要先在本地D:\\topN\\input目录下创建文件num.txt;然后,执行MapReduce程序的程序入口TopNDriver类,正常执行完成后,在指定的D:\\topN\\output目录下生成结果文件。

你可能感兴趣的:(mapreduce,大数据,hadoop)