2020年暑假 (8)

需求1求出每一个url被访问的总次数,并将结果输出到一个结果文件中

思路:就是一个wordcount

map阶段: 解析数据,将url作为key1作为value发出

reduce阶段:将一组数据的value累加

需求2求出每个网站被访问次数最多的top3url《分组TOPN

思路:

map阶段——切字段,抽取域名作为keyurl作为value,返回即可

reduce阶段——用迭代器,将一个域名的一组url迭代出来,挨个放入一个hashmap中进行计数,最后从这个hashmap中挑出次数最多的3url作为结果返回

 

需求3求访问次数最多的topn个网站(只能有1reduce worker《全局TOPN

思路:

map阶段:解析数据,将域名作为key1作为value

reduce阶段:

reduce方法中——对一个域名的一组1累加,然后将 <域名,总次数>放入一个成员变量Treemap

cleanup方法中——从treemap中挑出次数最高的n个域名作为结果输出

要点1每一个reduce worker程序,会在处理完自己的所有数据后,调用一次cleanup方法

要点2如何向mapreduce传自定义参数

JobSubmittermain方法中,可以向map workerreduce worker传递自定义参数(通过configuration对象来写入自定义参数);然后,我们的map方法和reduce方法中,可以通过context.getConfiguration()来取自定义参数

Configuration conf = new Configuration() //

这一句代码,会加载mr工程jar包中的hadoop依赖jar中的各默认配置文件*-default.xml

然后,会加载mr工程中自己的放置的*-site.xml

然后,还可以在代码中conf.set("参数名","参数值")

另外,mr工程打成jar包后,在hadoop集群的机器上,用hadoop jar mr.jar xx.yy.MainClass

运行时,hadoop jar命令会将这台机器上的hadoop安装目录中的所有jar包和配置文件通通加入运行时的classpath

配置参数的优先级:

1、依赖jar中的默认配置

2、环境中的*-site.xml

3、工程中的*-site.xml

4、代码中set的参数

优先级一次增大,高优先级的参数值会覆盖低优先级的参数值

   

原文地址:https://www.cnblogs.com/ywqtro/p/13590890.html