读书人

MapReduce 编程模型在日记分析方面的应

发布时间: 2013-10-14 12:54:46 作者: rapoo

MapReduce 编程模型在日志分析方面的应用

简介

日志分析往往是商业智能的基础,而日益增长的日志信息条目使得大规模数据处理平台的出现成为必然。MapReduce 处理数据的有效性为日志分析提供了可靠的后盾。

本文将以对访问网页用户的日志进行分析,进而挖掘出用户兴趣点这一完整流程为例,详细解释 MapReduce 模型的对应实现,涵盖在 MapReduce 编程中对于特殊问题的处理技巧,比如机器学习算法、排序算法、索引机制、连接机制等。文章分三部分展开:首先介绍 MapReduce 编程模型,对其原理、对任务处理流程以及适用情况进行介绍;接下来描述了日志分析的例子 - 用户兴趣点挖掘的处理流程;最后对处理流程的几个模块分别进行了 MapReduce 的实现。本文的目的在于通过 MapReduce 在日志分析领域的具体实现,使读者对 MapReduce 对实际问题的处理有较为形象的认识。

?

回页首

MapReduce 编程模型简介

随着信息化的进一步加深,在各个领域,如电信、交通、金融、零售、航天、医药等,数据量级都呈现快速增长趋势。如何高效并且无误地存储、分析、理解以及利用这些大规模数据,成为一个关键性问题。

为了应对大规模数据处理的难题,MapReduce 编程模型应运而生。Google 提出的这一模型,由于良好的易用性和可扩展性,得到了工业界和学术界的广泛支持。Hadoop,MapReduce 的开源实现,已经在 Yahoo!, Facebook, IBM, 百度 , 中国移动等多家单位中使用。

MapReduce 编程模型

MapReduce 以函数方式提供了 Map 和 Reduce 来进行分布式计算。Map 相对独立且并行运行,对存储系统中的文件按行处理,并产生键值(key/value)对。Reduce 以 Map 的输出作为输入,相同 key 的记录汇聚到同一 reduce,reduce 对这组记录进行操作,并产生新的数据集。所有 Reduce 任务的输出组成最终结果。形式化描述如下:

Map: (k1,v1) -> list(k2,v2)

Reduce:(k2,list(v2)) ->list(v3)

MapReduce 对任务的处理流程如图 1 所示。主要分为几步:

  1. 用户提交 MapReduce 程序至主控节点,主控节点将输入文件划分成若干分片(split)。主控节点 Master 和工作节点 worker 启动相应进程;
  2. 主控节点根据工作节点实际情况,进行 map 任务的分配;
  3. 被分配到 map 任务的节点读取文件的一个分片,按行进行 map 处理,将结果存在本地。结果分成 R 个分片进行存储,R 对应的是 Reduce 数目;
  4. Map 节点将存储文件的信息传递给 Master 主控节点,Master 指定 Reduce 任务运行节点,并告知数据获取节点信息;
  5. Reduce 节点根据 Master 传递的信息去 map 节点远程读取数据。因为 reduce 函数按分组进行处理,key 相同的记录被一同处理,在 reduce 节点正式处理前,对所有的记录按照 key 排序;
  6. Reduce 将处理结果写入到分布式文件系统中。


图 1 . MapReduce 处理流程图
MapReduce 编程模型在日记分析方面的应用?

MapReduce 适用情况

由于 MapReduce 编程模型是对输入按行顺次处理,它更适用于对批量数据进行处理。由于良好的可扩展性,MapReduce 尤其适用于对大规模数据的处理。

但是,对搜索等只是需要从大量数据中选取某几条特别的操作,MapReduce 相对于具有完善索引的系统而言,不再具有优势。因为它需要对每条数据进行匹配,并与搜索条件相匹配的数据提取出来。而如果采用索引系统,并不需要遍历所有的数据。

另外,由于每次操作需要遍历所有数据,MapReduce 并不适用于需要实时响应的系统。相反地,对于搜索引擎的预处理工作比如网页爬虫、数据清洗,以及日志分析等实时性要求不高的后台处理工作,MapReduce 编程模型是足以胜任的。

?

回页首

日志分析应用

互联网或者大型应用系统中,日志的产生和记录是非常重要的事情。日志分析则是进行数据挖掘进而推进下一步工作的基础。比如,在购物网站,针对用户访问网页的信息,可以挖掘出用户的兴趣点,进而进行物品推荐;又比如,在应用系统中,通过分析用户对系统部件的使用情况,可以挖掘出该系统中的热点部件,进而采取相应的措施加强管理;典型地,对于一个医疗卫生系统,根据医生对不同病情开处方的日志记录,可以挖掘出某种病情和药品的对应关系,进而建立一个专家推荐系统等。

随着互联网行业的壮大和应用系统规模的扩充,记录相应信息的日志数量级也在急剧扩充。传统的单机版分析程序已经不能满足日志分析的需求,为此,大规模数据处理平台成为日志分析的理想平台。另一方面,日志分析并没有很高的实时性要求,MapReduce 编程模型由于易用性强、处理数据规模大,成为日志分析的利器。

本文下面部分会以用户访问网页日志为例,阐述如何利用 MapReduce 来分析日志,进而挖掘出相应信息。

?

回页首

用户访问网页行为建模

一般而言 , 用户每访问网页时 , 系统日志中会存储一条记录 : 用户 + url + 访问时间。用户访问的一系列网页记录即是推断用户兴趣点的基础,即:用户 + urlSet。

如何根据用户访问的系列 URL 信息来推测用户兴趣点?一般而言,由以下几个步骤构成:

读书人网 >编程

热点推荐