首页 > 范文大全 > 正文

Hadoop在海量数据分析中的应用

开篇:润墨网以专业的文秘视角,为您筛选了一篇Hadoop在海量数据分析中的应用范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘 要 电子商务及互联网的广泛应用,产生了高达GB甚至TB规模的海量日志文件,传统的日志分析技术已经无法满足海量数据分析的需要。基于hadoop的分布式并行处理方式在海量数据分析中表现出优越的效率,本文实现一个基于Hadoop的海量数据分析系统,可以并行分析大日志文件。

关键词 Hadoop;海量数据分析;MapReduce

中图分类号:TP311 文献标识码:A 文章编号:1671-7597(2014)21-0134-02

1 Hadoop生态圈

对于电商企业而言,对大量用户产生的海量数据文件进行分析是必须面临的首要任务。对海量数据进行分析时,Hadoop分布式框架可以借助Hive完成工作:其中Hadoop集群适用于处理海量数据,而Hive是一个数据仓库工具,可以将类SQL语句转换为MapReduce程序。针对海量数据分析这一需求,Hadoop有两个主要的功能:存储和数据分析。Hadoop的存储组件HDFS能够实现分布式数据存储的功能;另外,Hadoop的数据分析组件MapReduce能够对海量数据进行高效运算。HDFS是分布式存储的,对硬件要求比传统的文件系统更低,相对其他文件系统而言,具有如下特征:在硬件故障处理方面,由于Hadoop集群一般由很多机器组成,即使某节点发生故障也可以马上找到替代,不会出现单点故障;MapReduce框架是Hadoop分布式集群的数据处理框架,其基本原则是使用集群来处理庞大的数据:每个任务只处理一小部分数据。数据处理作业会把海量数据作为输入,并将海量数据划分为若干小块,在经过并行的Map操作后,将中间结果先写入内存或本地磁盘,再发送给不同的Reduce;Reduce程序的作用是处理中间数据,并将最终结果写入到HDFS文件系统。

Hive可以将类SQL语句(HiveQL)转换为MapReduce程序,和传统的数据库相比,Hive有如下不同[2]:1)Hive不支持数据更新。传统的数据库可以直接更新数据,而由于HDFS中的数据只写一次,所以Hive并不支持HDFS中的数据更新操作,若要改变一个数据,需要先删除相关的数据或分区表,然后再重新插入数据。2)Hive不支持数据索引。传统的数据库支持数据索引,而Hive并不支持数据索引,又由于Hive承载的是HDFS分布式文件系统,涉及到海量数据,所以在数据查询上的效率并不高。为了方便数据的存储,Hive引入了分区表的概念,如果涉及到的数据操作只与某个分区表相关,就会大大节省数据操作的时间,提高效率。

2 日志数据预处理模型

为了对日志文件进行上述分析,需要首先对Web服务器产生的日志文件进行预处理,以尽可能简化日志、去掉对电子商务网站无用的数据,同时统一日志文件的格式。HDFS文件系统对日志文件进行预处理的流程如下:Map程序将处理产生的中间key/value对推送到本地我就系统和HDFS文件系统,然后Reduce程序从这两个文件系统中拉数据。日志数据预处理的常用模型如图1所示。

预处理的首要步骤是数据清洗,其目的是把日志中和数据分析无关的数据处理掉。数据清洗要处理的内容主要包括[3]:1)数据格式清洗。Hadoop数据分析的对象主要是文本数据,其他诸如音频、图片以及视频等数据对普通的日志数据分析意义不大,所以可以清洗掉后缀名包含.jpg、.gif等文件。2)状态清洗。客户请求并不是每次都会成功的,在进行数据分析前,也可以将请求状态不成功的那些数据清洗掉。3)请求类型清洗。用户的请求类型包括GET、POST、以及PUT等,但可以真正反映用户行为的只有GET类型的请求,所以可以清洗掉其他两种类型的数据。

图1 日志处理模型

数据清洗完成后,可以进行用户识别处理(user identification),用户识别指的是借助识别算法识别出日志数据涉及到的访问用户,以进一步确定日志数据中的用户和前台web页面的关系。用户识别主要是通过诸如IP地址判断、请求源判断以及链接关联性判断等来实现。会话识别的作用是识别经过用户识别处理后的用户行为,判断用户从初次进入web站点到离开站点的操作。路径识别(path identification)是web服务器日志数据处理的最后一步,目的是在完整路径基础上进行会话拆分。

3 基于Hadop的数据分析系统及其应用

经过预处理后的日志文件,接下来要按照维度进行粒度划分,以生存最细分粒度的数据。日志文件的数量本来就十分庞大,再进行粒度划分后,细粒度的日志数量更加海量化,合适的选择划分工具将事半功倍,本文采用Apache Pig实现这一过程。Pig包含类似高级语言的数据分析程序,因此可以用于进行海量数据分析。在将日志文件划分为最细分粒度的数据后,接下来就可以对每一个类别的最细分数据建立Hive表,然后使用Apache Hive汇总需要的细分粒度数据。每一个步骤产生的Hive表都可以被后面的处理过程使用,系统受到中间步骤产生的Hive表时,会调用Hive的相关接口,令其接收并处理Hive表中的内容。

Apache服务器会记录web访问生成的日志信息,并且会根据最终日志文件大小和每个日志文件的大小来决定日志文件的个数。将日志文件控制在合理大小范围内的目的是,一旦出现日志推送失败的情况,就可以在相对安全的时间内恢复,不影响后续的任务。一般而言,日志文件会产生在不同的机器上,为方便处理日志信息要将其推送到一个统一的平台――HDFS文件系统上,假设本地系统上当前日志文件是XXX.txt,则可以使用HDFS相关的shell命令实现日志文件的推送[4]:

hadoop fs put XXX.txt /hdfs

web服务器上的apache日志文件格式一般如下:

192.168.169.50 - - [17/Feb/2012:10:36:26 +0800] “GET / HTTP/1.1” 403 5043 “-””Mozilla/5.0 (Windows NT 5.1; rv:6.0) Gecko/20100101 Firefox/6.0”

Apache日志中第一项是目标服务器的IP地址,第二项和第三项用“-”代替,第四项是请求的时间,第5项包括请求类型(此处是GET类型),接下来是请求的结果状态(此处为403);对日志文件的处理都涉及到上述内容。

在利用MapReduce程序对海量日志文件进行处理时,首先需要将日志文件导入到HDFS文件系统中,Mapper程序会自动将输入文件分割为若干小块;接下来Map函数会对输入中的每一行数据进行分析,提取预先设定的关键字并组织<关键字,1>为中间键值对;Reduce函数累加计算中间键值对,并输出为<关键字,N>格式的键值对,最终得到关键字在日志中的总次数。用于处理日志文件的Mapper和Reducer函数代码如下所示:

Mapper程序:

#!/usr/bin/env python

import sys

for line in sys.stdin:

words = line.strip().split()

for word in words:

print “%s\t1” % (word.lower())

Reduce程序:

#!/usr/bin/env python

import sys

(last_key, last_count) = (None, 0)

for line in sys.stdin:

(key, count) = line.strip().split(“\t”)

if last_key and last_key != key:

print “%s\t%d” % (last_key, last_count)

(last_key, last_count) = (key, int(count))

else:

last_key = key

last_count += int(count)

if last_key:

print “%s\t%d” % (last_key, last_count)

4 结论

本文首先介绍了广泛用于海量数据分析的Hadoop生态圈,接下来说明了日志文件预处理的模型,并以此为基础实现了基于Hadoop的海量数据分析系统,并给出简单的Map程序和Reduce程序;最后将本文实现的hadoop海量数据分析系统应用于设计的海量日志分析,进行大日志文件的terasort操作。实验结果表明,对海量日志文件进行数据分析时,本文设计的数据分析系统对海量数据的处理性能并不比商业数据分析工具差;另外,其开源特性能够有效降低采购成本,不论是海量数据分析的效率,还是数据查询的速度,都能够为数据的分析和处理提供有力的平台支撑。

参考文献

[1]崔杰,李陶深,兰红星,等.基于Hadoop的海量数据存储平台设计与开发[J].计算机研究与发展,2013,2(15).

[2]刘源.基于Hadoop的海量数据分析系统设计与实现[D].大连理工大学,2013-12-08.

[3]章伟星.基于Hadoop的海量广告日志分析系统的设计与实现[D].哈尔滨工业大学,2013-06-01.

[4]霍树民.基于Hadoop的海量影像数据管理关键技术研究[D].国防科学技术大学,2010-10-01.

[5]王海飞.基于Hadoop云的数据库营销海量数据处理与挖掘的研究[D].浙江理工大学,2013-03-12.

作者简介

赵盈颖(1982-),女,湖北武汉人,讲师,研究生,研究方向:计算机软件应用。