我是 Apache Hadoop 的新手,我真的很期待探索它的更多功能。在基本的字数示例之后,我想提高一点赌注。因此,我通过阅读《Hadoop In Action》一书得到了这个问题陈述。“拿一个 Web 服务器日志文件。编写一个 MapReduce 程序来汇总每个 IP 地址的访问次数。编写另一个 MapReduce 程序来查找访问量排名前 K 的 IP 地址。这些频繁访问者可能是合法的 ISP 代理(在许多用户)或者他们可能是爬虫和欺诈者(如果服务器日志来自广告网络)。” 有人可以帮我看看我应该如何开始吗?实际编写我们自己的代码有点困难,因为 hadoop 只提供 wordcount 作为启动的基本示例。任何帮助将不胜感激。谢谢。
问问题
1391 次
1 回答
2
编写一个 MapReduce 程序来汇总每个 IP 地址的访问次数。
wordcount 示例与此示例没有太大区别。在 wordcount 示例中,地图在从输入中提取“单词”后发出 ("word",1),在 IP 地址情况下,地图在提取“192.168.0.1”后发出 ("192.168.0.1",1)日志文件中的 IP 地址。
编写另一个 MapReduce 程序,找出访问量排名前 K 的 IP 地址。
在第一个 MapReduce 作业完成后,会有很多基于 # of reducer 的输出文件,内容是这样的
<visits> <ip address>
所有这些文件都必须使用getmerge选项进行合并。getmerge 选项将合并文件并在本地获取文件。
然后必须使用基于第一列的排序命令对本地文件进行排序,即访问次数。
然后使用 head 命令可以获取前 n 行通过访问获取前 n 个 IP 地址。
第二个 MR Job 可能有更好的方法。
于 2011-09-23T13:34:14.923 回答