我一直在研究MapReduce,它似乎是实现容错分布式计算的一种非常好的方法.我阅读了很多关于该主题的论文和文章,在一系列虚拟机上安装了Hadoop,并做了一些非常有趣的测试.我真的认为我理解Map和Reduce步骤.
但这是我的问题:我无法弄清楚它如何帮助http服务器日志分析.
我的理解是大公司(例如Facebook)使用MapReduce来计算他们的http日志,以便加快从中提取受众统计数据的过程.我工作的公司,虽然比Facebook小,但每天都有大量的网络日志需要计算(100Go每月增长5%到10%).现在我们在一台服务器上处理这些日志,它运行得很好.但是,作为一种即将有用的优化,可以立即想到分发计算工作.
以下是我现在无法回答的问题,非常感谢任何帮助:
MapReduce概念能否真正应用于网络日志分析?
MapReduce是最聪明的做法吗?
您将如何在各种计算实例之间拆分Web日志文件?
谢谢.
萨科
MapReduce概念能否真正应用于网络日志分析?
是.
您可以将您的hudge日志文件拆分为10,000或1,000,000行的块(对于您的日志文件类型而言,无论什么都是很好的块 - 对于apache日志文件我需要更大的数量),将它们提供给一些可以提取特定内容的映射器(比如每个日志行中的浏览器,IP地址,...,用户名,...),然后通过计算每个日志出现的次数(简化)来减少:
192.168.1.1,FireFox x.x,username1 192.168.1.1,FireFox x.x,username1 192.168.1.2,FireFox y.y,username1 192.168.1.7,IE 7.0,username1
您可以使用map操作提取浏览器,忽略版本以获取此列表:
FireFox FireFox FireFox IE
然后减少得到这个:FireFox,3 IE,1
MapReduce是最聪明的做法吗?
它很聪明,但你需要非常大才能获得任何好处......分割原木的PETABYTES.
要做这种事情,我宁愿使用消息队列和一致的存储引擎(如数据库),处理客户端从队列中拉出工作,执行作业,并将结果推送到另一个队列,而不是在某个时间框架内执行,可供其他人处理.这些客户端将是执行特定操作的小程序.
您可以从1个客户端开始,然后扩展到1000 ...您甚至可以在LAN上的所有PC上运行作为屏幕保护程序的客户端,并在8核服务器上运行8个客户端,在双核PC上运行2个客户端...
使用Pull:您可以有100个或10个客户端正在运行,多核计算机可以运行多个客户端,无论客户端完成什么,都可以用于下一步.而且您不需要为要完成的工作进行任何散列或分配.这是100%动态.
http://img355.imageshack.us/img355/7355/mqlogs.png
您将如何在各种计算实例之间拆分Web日志文件?
按元素或行数,如果它是基于文本的日志文件.
为了测试MapReduce,我想建议您使用Hadoop.