【问题标题】:How is MapReduce a good method to analyse http server logs?MapReduce 如何成为分析 http 服务器日志的好方法?
【发布时间】:2010-10-30 15:50:18
【问题描述】:

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

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

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

以下是我现在无法回答的问题,非常感谢您的帮助:

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

谢谢。
尼古拉斯

【问题讨论】:

    标签: distributed mapreduce logfile-analysis


    【解决方案1】:

    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
    

    您可以提取浏览器,忽略版本,使用地图操作获取此列表:

    FireFox
    FireFox
    FireFox
    IE
    

    然后减少得到这个: 火狐,3 即,1

    MapReduce 是不是最聪明的方法?

    这很聪明,但您需要非常大才能获得任何好处...拆分 PETABYTES 的日志。

    为了做这种事情,我更喜欢使用消息队列和一致的存储引擎(如数据库),处理从队列中提取工作、执行工作并将结果推送到另一个队列的客户端,在某些时间范围内未执行的作业可供其他人处理。这些客户端将是执行特定操作的小程序。

    您可以从 1 个客户端开始,然后扩展到 1000 个...您甚至可以拥有一个在 LAN 上的所有 PC 上作为屏幕保护程序运行的客户端,并在您的 8 核服务器上运行 8 个客户端,在您的服务器上运行 2 个双核PC...

    使用 Pull:您可以让 100 或 10 个客户端在工作,多核机器可以让多个客户端在运行,并且无论客户端完成什么都可以用于下一步。而且您不需要为要完成的工作进行任何散列或分配。它是 100% 动态的。

    http://img355.imageshack.us/img355/7355/mqlogs.png

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

    如果是基于文本的日志文件,则按元素或行数。

    为了测试 MapReduce,我建议您使用 Hadoop。

    【讨论】:

    • 首先,抱歉耽搁了。非常感谢您提供高质量的答案。很有帮助!
    • 作为拆分日志文件的替代方法,您可以在 n 个内核上并行化您的“日志分析”脚本。如果您要在虚拟化集群(例如 96 个内核)上运行此脚本,您的代码将在没有任何更改的情况下完美运行。您需要识别和隔离无副作用并处理不可变数据的“最小”工作单元。这可能需要您重新设计代码。此外,Hadoop 相对更难设置(在我居住的地方,专业知识更难找到)。
    【解决方案2】:
    • MapReduce 概念真的可以应用于博客分析吗?

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

    • MapReduce 是不是最聪明的方法?

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

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-10
    • 1970-01-01
    • 1970-01-01
    • 2016-06-17
    • 1970-01-01
    • 2011-01-22
    相关资源
    最近更新 更多