基于Hadoop的民航日志分析系统及应用

2017-03-06 00:10李建曾新励
软件导刊 2017年1期
关键词:并行计算

李建+曾新励

摘要摘要:民航信息系统日志包含大量信息,但由于日志数据非结构化,不易被读取且数据量巨大,难以通过人工分析得出有价值信息。Hadoop分布式计算技术恰好可以很好地解决这个问题。设计了基于Hadoop的民航日志分析系统,系统结合数据挖掘领域经典的KNN分类算法,对算法进行了并行化改进,给出算法在Hadoop平台的MapReduce编程模型上的执行流程。对系统进行单机和集群测试,集群系统在处理较大规模数据时更高效。实验结果证明,系统具有较高的执行效率和可扩展性,对民航日志分析具有较高的实用价值。

关键词关键词:日志分析;Hadoop;KNN算法;并行计算;MapReduce

DOIDOI:10.11907/rjdk.162386

中图分类号:TP319文献标识码:A文章编号文章编号:16727800(2017)001010004

引言

随着民航信息化建设的深入,民航信息系统越来越多,复杂度越来越高。系统每天产生大量日志数据,这些数据记录着系统的运行状态。目前民航系统日志数据分为两部分:①过去运行生成的大文件,约56GB;②每天生成的文件,大约是200-300MB。日志是apache common格式,分析系统产生的日志数据成为了解系统安全与可扩展性的重要途径,相关业务指标可供运营决策者使用。

由于日志信息不易读懂且数据量不断增长,利用人工或传统分析技术难以发掘出有效信息。Hadoop提供的分布式计算技术为解决此问题提供了思路。Hadoop平台提供的分布式文件存储和并行计算能力,充分利用了集群高速运算和存储的优点,用户可在不了解分布式底层细节的情况下,利用Hadoop所提供的MapReduce并行计算框架,开发一个高度可扩展的分布式处理系统,进行大数据分类工作。

数据分类作为数据挖掘领域的重要分支,是数据挖掘非常重要的研究方向[1],其中KNN分类算法是数据挖掘领域的经典算法[2]。该算法是一种基于实例的学习算法,其核心是根据已知对象与未知对象之间相似度的比较来对未知对象进行分类。当给定一个未知实例时,KNN 分类算法根据与该实例最近的k个实例进行分类。

本文基于Hadoop平台下的MapReduce并行技术,研究并实现民航日志分析系统。利用Hadoop提供的分布式存储来存放日志数据,结合KNN数据挖掘算法对数据进行更深层次的分析,提高数据利用价值。算法整体分为数据预处理、训练、分类3个阶段。KNN分类算法进行MapReduce并行化的基本思路是:首先将训练样本和测试样本数据预处理并上传到Hadoop的文件系统中,然后将计算量很大的数据预处理阶段和训练阶段作业内容交由Map计算过程处理,完成测试样本与训练样本的欧式距离计算,再将Map计算结果提交到Reduce进行数据分类,最终得到测试样本分类结果。

实验选取系统产生的几组日志数据在Hadoop集群上测试,并与单机环境比对。实验结果证明,集群系统具有较高的执行效率、良好的加速比和扩展性。

1相关工作

1.1Hadoop平台

Hadoop是Apache软件基金会的开源项目,也是并行处理大规模数据的代表性产品。用户可以在不了解分布式底层细节的情况下,利用Hadoop提供的分布式系统基础架构开发分布式应用,将集群存储资源、网络资源和计算资源统一起来,实现海量数据的高速运算和存储。Hadoop层次结构如图1所示。

Hadoop框架最核心的设计是HDFS和MapReduce。HDFS是一个分布式文件系统,具有高容错性特点,可以部署在廉价硬件上,由一个名称节点(NameNode)和N个数据节点(DataNode)组成。 NameNode节点是整个文件系统的管理节点,它维护着整个文件系统的目录树,文件根目录的元信息和每个文件对应的数据块列表,接收用户的操作请求,以及数据块列表到具体存储数据DataNode节点的映射。集群中的DataNode节点在NameNode节点的统一调度下提供数据文件的存储服务,并且提供数据块的创建、删除和复制功能[4]。

1.2MapReduce分布式計算框架

MapReduce是一种并行编程模型,基于HDFS基础上实现,主要针对大规模数据集的并行计算。MapReduce编程模型原理:JobTracker主节点负责接收用户提交的作业,负责启动、跟踪任务执行,对大数据集按块进行分割,然后将数据块分发到若干个TaskTracker节点上。TaskTracker节点负责执行用户自定义的MapReduce任务,并将执行完成得到的结果返回JobTracker主节点。整个计算过程中,数据的输入输出均采用键值对形式。MapReduce执行流程如图2所示。

1.3KNN分类算法

KNN分类算法是一种基于实例的学习算法,其原理简单、易于实现。算法原理是将训练实例和测试实例看作n维空间内的点,给定一条测试实例,搜索n维空间,找出与测试实例最相近的k个点,最后取这k个点中的多数类作为测试实例类别。相似度的度量方法采用空间内两个点的距离来衡量。两点间距离越大,表示两个点越不相似。选择欧几里得距离作为度量方法。由于KNN分类算法需要多次扫描数据集,前后之间没有计算顺序上的相关性,每个待分类的样本都可以独立进行KNN分类,因此可以用并行化方法来实现KNN算法。

2日志分析系统设计

2.1系统架构

系统日志处理流程:①日志采集;②存储;③日志清洗;④分析;⑤显示,结构如图3所示。日志采集阶段负责将日志服务器中指定的日志数据上传到Hadoop集群中的HDFS文件系统。由于日志记录中往往包含噪声,需先进行必要的数据清洗,将清洗后存放在HDFS上的数据作为分析阶段的数据输入。分析阶段KNN算法结合MapReduce编程模型,整体分为训练和分类两个部分。KNN分类算法进行MapReduce并行化的基本思路:首先JobTracker主节点接受用户请求,启动TaskTracker节点执行Map计算开始样本训练,完成测试样本与训练样本的欧式距离计算;然后在执行Map计算的节点执行Combine函数对数据进行规约处理,以减少提交到Reduce节点的数据量;当Reduce节点收到中间计算结果后进入分类阶段,对测试样本进行分类处理。分析结果仍然存储在HDFS文件系统中,最后经过页面展示以可视化形式显示给用户。

2.2日志采集阶段

日志采集阶段使用flume技术。flume是一个分布式数据收集系统,也是Hadoop生态系统的重要组件之一,具有高可靠、高可用、事务管理、失败重启等功能。flume启动通过后台脚本定时执行,数据处理速度快[5]。flume核心是agent,agent是一个java进程,运行在日志收集端Web服务器中,通过agent收集每一个前端Web服务器中产生的日志数据,然后暂存起来,再发送到目的地HDFS存储系统。

2.3数据预处理阶段

使用flume把日志数据导入到HDFS中,再使用MapReduce对HDFS中的原始数据进行清洗,将Web日志数据向量化表示。一条Web日志记录往往不完整或者包含噪声,实际使用时并无用处,需要预先处理[6]。例如请求一个URL页面时,与页面相关的js或样式文件图片等信息也会记录在日志中,需要在预处理中删除后缀为jpg等图片格式、js等相关记录行,只保留用户IP地址、请求时间、请求方法、请求内容、请求前的跳转地址、浏览器类型及操作系统类型、服务器返回状态相关内容。实际情况中用户可能使用代理或本地缓存,不同用户可能使用相同IP地址访问同一URL。对用户进行个体识别有3种方法:如果用户使用不同IP访问同一URL则视为不同用户;如果使用相同IP但浏览器和操作系统不同则视为不同用户;如果用户的请求页面与之前的跳转页面没有超链接关系也视为不同用户[7]。识别出用户后就可以用户为单位识别单个用户所访问的所有页面,用户访问网站时所浏览的所有页面组成一个用户记录,然后根据访问内容将用户分为不同用户群。得到清洗后的数据仍然存储在HDFS中,保留可计算的属性值,最后剩下的属性值用空格分开,减轻后期数据处理压力,然后将训练数据上传到HDFS指定目录下,将测试数据上传到指定待处理路径下,作为分析阶段的输入数据。

2.4训练阶段

训练阶段主要任务是读取包含用户记录的训练样本与测试样本,分别计算测试样本与每个训练样本的欧式距离,此任务交由Map函数执行。Map函数对训练样本按行读取,把读取到的数据以键值对的形式作为函数的输入数据,其中key为行号,value为训练样本每行的样本数据及样本类别,输入数据形式为<行号,样本>。然后计算训练样本与测试样本的相似度,即它们之间的欧式距离,并记录训练样本类别,最后将结果以对的形式存入context集合中。其中输出数据对的形式为<测试样本行号,向量集合<相似度值,训练样本类别>>。Map函数伪代码如下:

3.1实验环境及数据选取

为验证基于Hadoop的民航日志分析系统性能和有效性,本实验选取7台服务器,1个主节点和5个从节点,前者主要配置为HDFS元数据节点,负责管理分布式数据和分解任务的执行,后者配置为数据节点,负责分布式数据存储以及任务的执行。剩下的一台作为与集群对比的单机。本实验的输入数据为民航系统产生的几组日志数据。数据集具有52维,共计692 012个样本,其中训练样本为498 542个,测试样本为193 470个,数据集大小3 000MB。

3.2单机处理比较实验

本实验分别在Hadoop集群和单机环境下处理数据规模逐渐增大的数据集,分别统计系统运行耗时长短,对结果进行对比分析。对比结果如表1所示。

3.3集群性能实验

本实验内容为:运行KNN分类算法的一台计算机与运行改进后并行算法的Hadoop集群在处理相同规模数据时,从数据读入到处理完成所需要的时间。对比实验中,测试元组及样本数据量相同,Hadoop集群中节点数目逐步增加,实验结果如图4所示,横坐标为节点数,纵坐标为作业完成时间,单位为毫秒。

图4中虚线表示单机处理所用时间,基本保持在6 000ms不变。实线表示Hadoop集群处理所用时间,曲线变化较为明显。刚开始集群只有单个节点时任务执行所需时间要远高于单机所需时间,集群节点达到两个时任务执行时间比单机所花时间略长。随着Hadoop集群节点数增加,任务执行所需的时间逐步减少,特别是当节点数超过3个时,集群优势开始显现,当节点数达到7个时,时间节省非常明显,体现出当扩大Hadoop集群规模时,实施KNN并行算法有助于减少任务执行所需时间。当节点数目少于2个时,效率却远低于单机,集群优势无法体现。因为Hadoop集群任务的分发和任务的启动需要消耗一定的计算资源,集群之间数据的交互需要通过网络传输,数据的读取依赖于网络的传输速度,尤其是实际计算任务时间在总时间中所占比例较小时,集群优势难以体现。相对于单机执行而言,数据只需在本地处理一次性读入内存,因此处理速度相对较快。由此可知,随着节点数的增加,Hadoop集群的执行效率要优于单机上的执行效率,且随着数据量的逐渐增大,优势越加明显。

4结语

民航系统日志分析与管理是民航系统日常管理的重要保障。本文基于Hadoop平台使用MapReduce编程模型结合KNN算法,设计了民航日志分析系统。利用Hadoop集群在大数据处理上的优势,高效地进行日志数据分析与挖掘,具有很高的实用价值,实验达到了预期目标。相关实验结果表明,在Hadoop平台上处理大规模数据集时,在数据规模相同的情况下,算法的执行效率与集群规模有明显关系。当集群规模逐步擴大,节点越多,加速比越明显。下一步将尝试将更多的算法移植到Hadoop集群中,进行更深入的研究。

参考文献:

[1]JIAWEI HAN,MICHELINE,KAMBER.数据挖掘概念与技术[M].北京:机械工业出版社,2007:2031.

[2]COVER T,P HART.Nearest neighbor pattern classification[J].IEEE Trans on Information Theory,1967,13(1):2127.

[3]陆嘉恒.Hadoop实战[M].北京:机械工业出版社,2011:180203.

[4]金松昌.基于HDFS的多用户并行文件IO的设计与实现[D].长沙:国防科学技术大学,2010:13.

[5]高洪,杨庆平,黄展江.基于Hadoop平台的大数据分析关键技术标准化探讨[J].信息技术与标准化,2013(5):2324.

[6]朱鹤样.Web日志挖掘中数据预处理算法的研究[D].大连:大连交通大学,2010.

[7]赵莹莹,韩元杰.Web日志数据挖掘中数据预处理模型的研究与建立[J].现代电子技术,2007(4):103105.

猜你喜欢
并行计算
云计算中MapReduce分布式并行处理框架的研究与搭建
并行硬件简介