我是Apache Hadoop的新手,我真的很期待探索它的更多功能。在基本的wordcount示例之后我想稍微提高一点。所以我坐下来看看这个问题陈述,我通过Hadoop In Action书得到了这个陈述。 “获取Web服务器日志文件。编写MapReduce程序 汇总每个IP地址的访问次数。写另一个MapReduce 程序,以访问方式查找前K个IP地址。这些频繁 访问者可能是合法的ISP代理(在许多用户之间共享)或他们 可能是刮刀和欺诈者(如果服务器日志来自广告网络)。“ 谁能帮我解决一下我应该如何开始?因为hadoop实际上编写我们自己的代码很难,只能将wordcount作为启动的基本示例。 任何帮助感激不尽。感谢。
答案 0 :(得分:2)
编写MapReduce程序以汇总每个IP地址的访问次数。
wordcount示例与此没有太大区别。在wordcount示例中,地图在从输入中提取“单词”后发出(“单词”,1),在IP地址情况下,地图在提取“”192.168.0.1“后发出(”192.168.0.1“,1)”来自日志文件的IP地址。
编写另一个MapReduce程序,以便根据访问次数找到前K个IP地址。
完成第一个MapReduce作业后,会有很多输出文件基于减少器的数量,内容如下
<visits> <ip address>
所有这些文件都必须使用getmerge选项进行合并。 getmerge选项将合并文件并在本地获取文件。
然后必须使用基于第1列的排序命令对本地文件进行排序,第1列是访问次数。
然后使用head命令,您可以通过访问获得前n行以获得前n个IP地址。
第二个MR Job可能有更好的方法。