MapReduce 概念真的可以应用于博客分析吗?
是的。
您可以将您的 hudge 日志文件拆分为 10,000 或 1,000,000 行的块(对于您的日志文件类型来说是一个好的块 - 对于 apache 日志文件,我会选择更大的数量),将它们提供给一些可以提取特定内容的映射器(例如 Browser,IP Address, ..., Username, ... ),然后通过计算每个日志行出现的次数来减少(简化):
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
您可以提取浏览器,忽略版本,使用地图操作来获取此列表:
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。