7

关注 MapReduce 有一段时间了,它似乎是一个很好的实现容错分布式计算的方法。我阅读了很多关于该主题的论文和文章,在一系列虚拟机上安装了 Hadoop,并进行了一些非常有趣的测试。我真的认为我了解 Map 和 Reduce 步骤。

但这是我的问题:我不知道它如何帮助进行 http 服务器日志分析。

我的理解是,大公司(例如 Facebook)使用 MapReduce 来计算他们的 http 日志,以加快从中提取受众统计数据的过程。我工作的公司虽然比 Facebook 小,但每天都有大量的网络日志需要计算(100Go 每月增长 5% 到 10%)。现在我们在单个服务器上处理这些日志,它工作得很好。但是,分配计算作业会立即成为一种很快就会有用的优化。

以下是我现在无法回答的问题,任何帮助将不胜感激:

  • MapReduce 概念真的可以应用于博客分析吗?
  • MapReduce 是最聪明的方法吗?
  • 您将如何在各种计算实例之间拆分 Web 日志文件?

谢谢你。
尼古拉斯

4

2 回答 2

16

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。

于 2009-06-02T12:26:32.497 回答
1
  • MapReduce 概念真的可以应用于博客分析吗?

当然。你存储的是什么类型的数据?

  • MapReduce 是最聪明的方法吗?

它将允许您一次查询许多商品机器,所以是的,它可能很有用。或者,您可以尝试Sharding

  • 您将如何在各种计算实例之间拆分 Web 日志文件?

通常,您会使用一致的散列算法分发数据,这样您以后可以轻松地添加更多实例。您应该使用普通数据库中的主键来散列。它可以是用户 ID、IP 地址、引用者、页面、广告;无论您的日志记录的主题是什么。

于 2009-06-02T12:12:42.167 回答