我已经看map/reduce一段时间,并且它似乎是一个非常好的方式来实现容错的分布式计算。我读了很多论文和文章,题目,安装Hadoop在一系列虚拟机,并做了一些非常有趣的测试。我真的认为我了解的地图和减少的步骤。

但这里是我的问题: 我不能找出它是如何可以帮助与http服务器记录分析。

我的理解是,大公司(Facebook为实例)使用map/reduce为目的的计算他们http日志,以便加速这一进程中提取受众统计出来的。我工作的公司,同时小于Facebook,具有体积大的网络日志,以计算每日(100Go增长之间的5%到10%,每月)。现在我们处理这些记录在一个单一的服务器,它工作得很好。但是分配计算的工作立即想到作为一个即将成为有用的最优化。

这里的问题,我可以不回答的权利,任何帮助,将极大地赞赏:

  • 可以的map/reduce概念的真正应用于weblogs分析?
  • 是map/reduce最聪明的方式这样做?
  • 你会如何分割的网络日志之间的文件的各种计算实例?

谢谢你。
尼古拉斯

有帮助吗?

解决方案

可以的map/reduce概念的真正应用于weblogs分析?

是的。

你可以把你的hudge logfile成块的说10000个或1,000,000行(不论是一块好合你的类型logfile-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

是map/reduce最聪明的方式这样做?

这是聪明,但你会需要非常大,为了获得任何好处...分裂大量日志。

要做到这样的事情,我会更喜欢使用信息队列,并一致的储存引擎(如数据库),处理客户拉工作队,执行工作,并推动结果的另一队,与工作没有正在执行在一些时间可用于其他人来处理。这些客户会是小的方案,做一些具体的事情。

你可以开始1客户,并扩大到1000...你甚至可以有一个运行的客户端作为一个屏幕上的所有电脑上的一个局域网、以及运行8客户在8的核心服务器、2在你的双重核电脑...

与拉:你可以拥有100或10客户的工作,多核计算机可以有多个客户运行,任何一个客户完成将用于下一个步骤。你不需要做任何哈希或分配工作要做。这是100%的动态。

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

你会如何分割的网络日志之间的文件的各种计算实例?

通过数量的元素或行,如果它是一个基于文本的日志文件。

为了测试map/reduce,我想建议你打个人用云.

其他提示

  • 可以的map/reduce概念的真正应用于weblogs分析?

肯定的。什么样的数据是你们储存?

  • 是map/reduce最聪明的方式这样做?

它会让你查询在许多初级商品机一次,所以是的它可以是有用的。或者,你可以试试 .

  • 你会如何分割的网络日志之间的文件的各种计算实例?

通常你就分发数据的使用 一致的散列算法, 所以你可以很容易地增加更多的实例后。你应该散列无论通过什么会是你的主键在一个普通的数据库。这可能是一个用户标识,一个ip地址,引用程序、网页广告;不管是什么主题的记录。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top