基于Hadoop 集群的日志分析系统的设计与实现

时间:2022-10-20 11:02:00

基于Hadoop 集群的日志分析系统的设计与实现

摘要:当前Internet上存在着海量的日志数据,他们中蕴藏着大量可用的信息。对海量数据的存储和分析都是一个艰巨而复杂的任务,单一主机已经无法满足要求,使用分布式存储和分布式计算来分析数据已经成为了必然的趋势。分布式计算框架Hadoop已经日趋成熟,被广泛的应用于很多领域。该文描述了一个针对大日志分析的分布式集群的构建与实现过程。介绍了日志分析的现状,使用vmware虚拟机搭建了Hadoop集群和日志分析系统的构建方法,并对实验结果进行了分析。

关键词:分布式计算;日志分析;Hadoop;集群;vmware

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2013)34-7647-04

1 概述

日志文件是由系统或者应用程序产生的,用于记录系统和应用程序的操作事件如各种服务的启动、运行、关闭等信息。通过对日志文件的分析可以获得很多有价值的数据也能实现对系统安全、性能等方面的监控。Web日志[1]是由Web服务器产生的,随着社交网络的兴起,Web2.0时代的到来,网站的用户访问量的成级数增长,产生的日志文件大幅增多。传统的日志文件分析方式已经无法满足大数据量日志分析的需求。该文将以Web日志文件为例,利用Hadoop集群构建一个分布式计算平台为大数据日志文件的分析提供一个可行的解决方案,以提高了日志分析的效率,为进一步的大数据分析的提供参考。

现今日志文件分析方案是对大的日志文件先进行分割,然后对分割后的日志文件进行分析,分析方法采用文本分析及模式匹配等,最常见的是采用awk、python、perl。这种分析方式面对大数据的日志文件分析效率低下,耗时长。王潇博提出了基于挖掘算法的日志分析方式,并设计了TAT系统[1]。对于Web分析除了对Web日志本身进行分析外还可以主动收集访问信息,然后将信息存于关系型数据库中。这种方式最常见的是Google Analytics、百度统计等。这种方式将会影响网站的性能,延长网站的加载时间。其次如果直接采用第三方的统计,还将会泄露网站的信息。当访问量高时,基于关系型数据库分析的方式将会受到数据库性能的制约。钱秀槟,刘国伟,李锦川等人提出了基于模式匹配算法的Web应用日志分析系统[2]。

2 Hadoop集群系统概述

日志文件记录了日常操作的原始数据,数据极具价值。随着时间的推移日志文件越来越大,分析难度也随着增大。本系统的设计就是为了解决文本日志的分析,系统针对Web日志。本系统基于搭建好的Hadoop分布式架构,将数据先存入到HDFS文件系统中,运行mapreduce程序对日志文件进行过滤分析,最后将数据输出到指定文件中。充分发挥了Hadoop分布式存储和分布式计算的优势。 解决了海量数据日志文件的分析的难题,采用基于分布式结构的日志分析系统,提高了分析效率。

目标日志是由Apache服务器产生的访问日志。Apache采用默认安装方式时,访问日志access.log,存在于Apache安装目录的logs子目录下。访问日志access_log记录了所有对Web服务器的访问活动。下面是访问日志中一个典型的记录:

222.192.32.17 - - [30/Jun/2011:18:52:25 +0800] "GET /index.php? img=pngWrench HTTP/1.1" 200 741

这行内容由7项构成1) 远程主机的IP地址。2)浏览者的标识(空白用一个“-”占位符替代)3)记录浏览者进行身份验证时提供的名字(空白用一个“-”占位符替代)。 4)请求的时间。5) 请求类型(METHOD RESOURCE PROTOCOL)。6)状态代码(请求是否成功及原因)。7)发送给客户端的总字节数。

3 系统的设计与实现

3.1 系统的基本目标

利用分布式的架构对日志文件进行分析,对日志文件进行过滤,按时间对日志数据进行分析。分析主要从页面pv、ip、请求状态、流量等方面出发。每月PV总量、PV量最多的一天、每月每个url的pv、每月独立IP、每天的流量、月总流量、每天的访问状态统计、每月的访问状态统计、每天的请求方式统计、每月的请求方式统计等等。

3.2 Hadoop部署

图1介绍了Hadoop部署的基本结构,MapReduce 模型中的 Master 的主控作业节点称为 JobTracker,此框架下面的所有作业(Job)都是由 JobTracker 进行管理的,它是唯一存在的。TaskTracker,负责每一个具体任务的执行。任务(Task)是具体执行的基本单元,每一个作业被拆分成很多的任务,被分配到合适任务节点上去执行,任务节点一边执行分配过来的任务,一边向 JobTracker 汇报执行任务的状态,以此来帮助JobTracker 了解作业执行的整体情况,向空闲节点分配新的任务等操作。

3.3 日志数据的HDFS存储

图2展示了HDFS的工作原理。首先client通过调用DistributedFileSystem的create方法来创建文件。DistributedFileSystem通过RPC调用NameNode在文件系统的名字空间里创建一个文件。DistributedFileSystem返回FSDataOutputStream给client。FSDataOutputStream封装了一个DFSOutputStream来处理与datanodes和namenode之间的通讯。当client写一个block数据的时候,DFSOutputStream把数据分成很多packet。FSDataOutputStream询问namenode挑选存储这个block以及它的副本的datanode列表。这个datanode列表组成了一个管道,在上图管道由2个datanode组成(备份参数是2),这2个datanode的选择有一定的副本放置策略。4、FSDataOutputStream把packet写进管道的第一个datanode,然后管道把packet转发给第二个datanode。

当管道里所有datanode都返回写入成功,这个packet才算写成功,发送应答给FSDataOutputStream。开始下一个packet。如果某个datanode写失败了,首先管道关闭。运行正常的datanode上正在写的block会有一个新ID(需要和namenode通信)。这样失败的datanode上的那个不完整的block在上报心跳的时候会被删掉。失败的datanode会被移出管道。block中剩余的packet继续写入管道的其他两个datanode。同时namenode会标记这个block的副本个数少于指定值,然后block的副本会稍后在另一个datanode创建。

有些时候多个datanode会失败。只要dfs.replication.min(缺省是1)个datanode成功了,整个写入过程就算成功。缺少的副本会异步的恢复。当client完成了写所有block的数据后,调用FSDataOutputStream的close方法关闭文件。最后FSDataOutputStream通知namenode写文件结束。

3.4 日志分析过程

日志分析系统由客户端和Hadoop服务器组成,客户端调用Hadoop接口将日志文件存入HDFS并调用任务,这里的任务是按顺序执行的,在前一个任务执行成功后才执行下一个任务,每个任务都完成多件事,每个任务都调用map和reduce过程,最后一个任务将数据输出到HDFS的文本文件,也可以将文件输出到数据库中,最后根据统计数据进行展示。如图3。

4 结果分析

系统硬件环境的CPU为2.00GHz,内存为4G可用内存为3G,实验时为三台机器分配的内存情况master为256M,slave1为336M,slave2为384M。软件环境操作系统为rhel-server-6.0,JRE的版本:java-1.6.0。Hadoop版本:Hadoop-1.0.1。HDFS集群概况如图4。

通过分析执行过程的输出,第一个任务map过程耗时2分31秒,reduce耗时9秒,整个任务耗时2分48秒。Map过程读取的记录为311965条。reduce读取字节数为45431334,输出字节数为3938231。任务二,map26秒,reduce,16秒,累计47秒。任务三,map28秒,reduce,18秒,累计耗时51秒。所有任务总耗时:4分16秒。从数据可以看出,使用vmware虚拟机进行构建性能收到主机性能的影响,受限较多。但是,Hadoop架构能有效对任务进行调度和分配,达到预期效果。

图5可以看出任务输出了三个目录test-out1、test-out2、test-out3。每个任务输出一个,前两个目录存放的是临时的文件,test-ou3目录存放的是结果文件。这些输出的文件是根据日期来的,分为月汇总数据和每天的数据,这些文件存放了最终的结果。

图6和图7截取了六月份的部分数据。此文件存放了六月每个访问页面的pv总量,以及六月访问数据的汇总。六月的pv总和为139,get方式为127,post方式为12,http访问状态200次数为125,访问状态301次数为2,访问状态403次数为4,访问状态404次数为8,pv量最多的一天为2011年6月30日121次,最多的页面为/favicon.ico访问次数为7次,月流量为46698。也可以查看六月具体每一天的数据。图8是单日统计数据,这一天的pv量为5,get方式请求为4,post方式请求次数为1,请求的状态码都为200即请求成功,总流量为1684字节。

5 小结

分布式计算作为一项日趋成熟的技术,逐渐展露了其优势。Hadoop框架很好的将分布式文件系统HDFS和MapReduce编程模型进行了融合。使用Hadoop可以很便捷的搭建了一个分布式集群环境,它对分布式任务控制调度有很好的性能和伸缩性。以此实例为基础可以进一步进行拓展,对大数据任务进行更深入和详细的分析和挖掘,为各个领域的大数据处理提供参考。

参考文献:

[1] 王潇博.基于挖掘算法的日志分析系统设计与实现[D].北京:北京交通大学,2008:26-33.

[2] 钱秀槟,刘国伟,李锦川,等.Web 应用日志分析系统分析与设计[J].计算机安全,2011,2011(6).

[3] 肖立英,李建华,谭立球.Web日志挖掘技术的研究与应用[J].计算机工程,2002,28(7):276-277.

[4] 张彦超,刘云,张海峰,等.基于在线社交网络的信息传播模型[J].物理学报,2011,60(5):60-66.

[5] 胡光民,周亮,柯立新.基于Hadoop的网络日志分析系统研究[J].电脑知识与技术,2010, 6(22):65-69.

[6] 辛大欣,刘飞.Hadoop集群性能优化技术研究[J].电脑知识与技术,2011,7(22).

[7] 韩亚.关系传播:WEB2.0时代的传播偏向[D].武汉:华中科技大学,2008:1-2.

[8] Mark Lutz.Python学习手册[M].北京:机械工业出版社,2009:659-665.

[9] Pallis,George.Cloud Computing:The New Frontier of Internet Computing[J].IEEE internet computing,2010,14(5):70-72.

[10] Dean J,Ghemawat S.MapReduce:Simplified data processing on large clusters.In: Proc.of Association,2004:137-150.

上一篇:EPON 三重搅动算法研究及C 语言实现 下一篇:一种基于ActiveX 控件的Quest3D 与VB 通信方法