一种海量web日志数据查询与分析方法转让专利

申请号 : CN201410596395.6

文献号 : CN104298771B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 马廷淮瞿晶晶田伟薛羽曹杰

申请人 : 南京信息工程大学

摘要 :

本发明利用Hadoop/Hive分布式计算平台的高可靠性、高扩展性、高效性以及高容错性,公开了一种基于Hadoop和Hive的海量web日志数据的查询与分析方法。本发明包括以下步骤:对各个数据源的数据进行解析;将数据装载进数据仓库中;接收HiveQL语句;对接受语句进行优化,得到初步map结果;将接受语句转换成MapReduce任务执行并存储查询结果;数据分割;对数据进行分析挖掘;将数据装载进Mysql数据库中。本发明针对海量的web日志数据,实现精确地查询和数据分析,既能实现海量数据存储查询分析的可扩展性和高效性,也避免数据倾斜带来的job分布不均整体性能下降的问题。

权利要求 :

1.一种海量web日志数据查询与分析方法,其特征在于,包括如下步骤:

步骤(1),用 Hive中的ETL 对各个数据源的数据进行解析,解析过程包括提取、清洗、转化和加载四个步骤,提取阶段将源数据解析出来存入Hive中,用Hadoop及Hive程序从源数据中抽取可能会用到的数据到Transform层;清洗阶段基于Hive程序将后续可能会使用到的字段提取出来存入Load层,抛弃掉不会用到的数据和重复数据;加载阶段将处理好的数据存入Hive中的表,并删除源数据;在对数据进行清洗时,将其中的有用信息用MapReduce程序进行分布式抽取处理;

步骤(2),将抽取出来的数据装载进数据仓库中;

步骤(3),Hive 的部件 Driver接收HiveQL 语句;

步骤(4),针对倾斜数据对接受语句进行优化,进行表连接操作后得到初步的map结果;

步骤(5),将接收到的 HiveQL 语句转换成MapReduce任务执行并存储查询结果;

步骤(6),对于海量的web日志数据进行数据分割;

步骤(7),应用高度并行的全局随机化搜索的遗传算法对数据进行分析挖掘:首先从父代染色体中随机选择2 条染色体,然后随机生成插入位置Ins、删除位置Del、插入删除长度Len;接着比较2 段染色体是否等长,如果相等,则判断头尾是否有重合,有,则连接生成新的染色体,否则,不生成子代染色体;如果不等长,则判断插入和删除的2 段基因是否相同,如果相同,则合并为一条染色体作为新的染色体,否则,不生成子代染色体,当遗传代数为

50 的倍数时,群体间进行联姻操作,每个子群体一直重复上述操作,直到k 值不再变化;

步骤(8),将数据查询与分析部分得出的数据装载进 Mysql 数据库中。

2.根据权利要求1所述的海量web日志数据查询与分析方法,其特征在于:所述步骤(4)中的优化操作包括对倾斜的数据采用map join连接数据表,不倾斜的数据用普通的join连接数据表。

3.根据权利要求1或2所述的海量web日志数据查询与分析方法,其特征在于:所述步骤(5)中在map过程中引入组合函数combiner,实现本地key的聚合,对map输出的key排序,value进行迭代。

4.根据权利要求3所述的海量web日志数据查询与分析方法,其特征在于:所述combiner函数设置在合并操作产生的结果进行合并之前或之后运行。

说明书 :

一种海量web日志数据查询与分析方法

技术领域

[0001] 本发明属于计算机信息处理技术领域,具体涉及一种基于Hadoop和Hive的海量web日志数据查询与分析方法。

背景技术

[0002] 随着Internet技术的飞速发展,运行于Internet上的各种应用和服务也随之大量涌现,大数据的时代已经来临。每个网站本身都是一个独立的信息系统,这些网站经过网络互联后,使得整个互联网变成了一个巨大的信息系统。客户在浏览网站的过程中会留下它们访问的痕迹,这些痕迹会以web日志文件的形式保存下来。各种系统、程序、运维、交易等得日志变得越来越重要,因为它是系统恢复、错误跟踪、安全检测等操作的重要依据。
[0003] 由于数据源众多、各个系统的用户繁多、操作频繁,每日会产生 TB 级甚至 PB 级的海量web日志数据,而传统数据库由于可扩展性和处理性能的限制,已经不能满足现今动辄数十G、数百G、甚至上T的数据量的存储分析处理的要求。而在一大堆非结构化的日志文件里面,怎样快速检索出数据、怎样快速寻找到有用的数据、怎样对日志进行统计分析,成为亟待解决的问题。现有的大数据查询方法只能简单通过HBase直接进行行键的搜索和借助Hive的HQL进行检索,检索时延很大,数据分析结果也不准确,不能满足当前需求。

发明内容

[0004] 为解决上述问题,本发明利用 Hadoop/Hive分布式计算平台的高可靠性、高扩展性、高效性以及高容错性,公开了一种基于Hadoop和Hive的海量web日志数据的查询与分析方法。
[0005] 开源框架Hadoop是一个广泛应用而又非常独特的工具,用户通过自己编写的MapReduce程序,并通过调度将一个任务分成很多更细粒度的子任务,并把这些子任务分布到集群中的不同节点,以并行的进行。这样,在大的数据集的情形下也可得到用户接受的时间间隔。Hadoop使得不懂分布式计算的用户也可以充分利用分布式计算带来的好处。Hive首先由Facebook在2008年开源,一经推出,就使得Hive的使用变得非常流行,Hadoop的用户可以根据自己的数据处理需求来使用开发Hive。Hive 定义了简单的类 SQL 查询语言,称为 HiveQL,允许熟悉 SQL 的用户查询数据。同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 mapper 和 reducer 来处理内建的 mapper 和 reducer 无法完成的复杂的分析工作。Hive 主要包括用户接口、元数据存储、解释器、编译器、优化器、执行器等等。由解释器、编译器、优化器生成的计划存储在Hadoop的分布式文件系统文件系统 HDFS 中,执行器调用 MapReduce程序完成语句的调用分析。
[0006] 本发明针对web日志数据海量特征,根据实际情况对海量web日志数据进行相关的查询与分析,以优化的HiveQL为查询的重要手段,以数据分割和遗传算法的结合对海量日志数据进行分析,实现大数据的高效挖掘。
[0007] 为了达到上述目的,本发明提供如下技术方案:
[0008] 一种海量web日志数据查询与分析方法,包括如下步骤:
[0009] 步骤(1),用 Hive中的ETL 对各个数据源的数据进行解析,解析过程包括提取、清洗、转化和加载四个步骤,在对数据进行清洗时,将其中的有用信息用MapReduce程序进行分布式抽取处理;
[0010] 步骤(2),将抽取出来的数据装载进数据仓库中;
[0011] 步骤(3),Hive 的部件 Driver接收HiveQL 语句;
[0012] 步骤(4),针对倾斜数据对接受语句进行优化,进行表连接操作后得到初步的map结果;
[0013] 步骤(5),将接收到的 HiveQL 语句转换成MapReduce任务执行并存储查询结果;
[0014] 步骤(6),对于海量的web日志数据进行数据分割;
[0015] 步骤(7),应用高度并行的全局随机化搜索的遗传算法对数据进行分析挖掘;
[0016] 步骤(8),将数据查询与分析部分得出的数据装载进 Mysql 数据库中。
[0017] 进一步的,所述步骤(4)中的优化操作包括对倾斜的数据采用map join连接数据表,不倾斜的数据用普通的join连接数据表。
[0018] 进一步的,所述步骤(5)中在map过程中引入组合函数combiner,实现本地key的聚合,对map输出的key排序,value进行迭代。
[0019] 进一步的,所述combiner函数设置在map产生的结果进行合并操作之前或之后运行。
[0020] 与现有技术相比,本发明具有如下优点和有益效果:
[0021] 本发明针对海量web日志数据,结合考虑存储海量数据系统的可扩展性还有数据结构的非结构化,以及已有数据处理方法的优缺点,基于Hadoop/Hive分布式系统的高性能计算和基于数据分割和遗传算法的数据分析技术,有助于在海量的web日志数据的查询与分析,实现精确地查询和数据分析。例如,可以分析搜索引擎网站的日志数据得到用户点击顺序跟URL的排名。本方法进行了Hive优化,弥补了以往只能简单通过HBase直接进行行键的搜索和借助Hive的HQL进行检索时延很大的缺点;同时,为采用数据分割分析,同时采用遗传算法分析日志数据中的记录,令数据分析结果更为准确。两方面的结合,既能实现海量数据存储查询分析的可扩展性和高效性,也避免数据倾斜带来的job分布不均整体性能下降的问题。相对于传统的日志数据查询分析方法,能使得进行日志数据分析查询的公司或者客户能准确的了解web情况,例如可以根据用户点击顺序跟URL的排名找到热门网站进行商户的广告投放。本发明实现了大数据的数据挖掘,例如可以实现web的推荐和电子商务的营销。

附图说明

[0022] 图1为本发明方法步骤流程示意图;
[0023] 图2为网页的链表结构图。

具体实施方式

[0024] 以下将结合具体实施例对本发明提供的技术方案进行详细说明,应理解下述具体实施方式仅用于说明本发明而不用于限制本发明的范围。
[0025] 客户在浏览网站的过程中会留下它们访问的痕迹,这些痕迹会以web日志文件的形式保存下来。本例即针对这些数据,采用Hive中的ETL语言、优化的Hive SQL查询、引入combiner函数的MapReduce、基于数据分割技术的遗传算法来精确提供日志数据查询与分析的结果。如图1所示,本方法具体步骤如下:
[0026] 步骤10,用 Hive中的ETL 对各个数据源的数据进行解析。ETL过程包括对数据进行提取、清洗、转化和加载的四个步骤。提取阶段将源数据解析出来存入Hive中,用Hadoop及Hive程序从源数据中抽取可能会用到的数据到Transform层;清洗阶段基于Hive程序将后续可能会使用到的字段提取出来存入Load层,抛弃掉不会用到的数据和重复数据;加载阶段就是将处理好的数据存入Hive中的表,并删除源数据。但仅用 ETL 工具抽取数据不能满足速度的要求,本发明针对数据的清洗过程采用 MapReduce 程序编写,将每条数据进行读取,抽取相应字段。处理原始数据时,采用 MapReduce 程序进行分布式清洗处理,在集群中设置一个NameNode(JobTracker)来担任数据分发服务器,设置 DataNode(TaskTracker)来存放并处理经由 NameNode 分发的数据。NameNode 将要处理的数据分成大小为 128 兆的块,每个块数据设置两个备份,然后按照一定算法由 Hadoop 系统自行将块数据存入 DataNode  即数据处理服务器里,进行数据的进一步处理。本步骤涉及到  Hive  及 MapReduce的应用,它是建立在分布式文件系统 HDFS 基础上的,随后数据仓库从多维度对海量数据进行建模,根据要求查询或者分析数据。
[0027] 步骤20,将经步骤10解析过的数据存入数据仓库Hive中设计并建好的表当中。Hive中的表的个数根据数据的实际情况设计,需要创建多个表,每个表创建流程大体相同。
例如存储Apache格式日志的表的字段:访问者IP、浏览者标识、用户名、访问时间、访问的方法、请求访问的文档等等。本发明建立一个关系数据库 metastore 专门用来存储表的元数据信息。
[0028] 步骤30, Hive 系统自带的 Driver 接受 HiveQL 语句,掌管 HiveQL 语句的生命周期,包括对 HiveQL语句的编译、优化和执行,其具体过程如下:
[0029] 步骤40,针对倾斜数据问题,对接受语句进行优化,进行表连接(join)操作后得到初步的map结果:无效id在关联时就会碰到数据倾斜的问题,比如每日约为20亿的全网日志,其中的访问者IP为主键,在日志收集过程中会丢失,出现主键为null的情况,如果取其中的访问者IP和浏览者标示关联,就会碰到数据倾斜的问题。原因是Hive中,主键为null值的项会被当做相同的Key而分配进同一个计算map,会造成计算瓶颈。根据数据的分布符合社会学统计规律,倾斜的key不会太多,进行Hive查询join语句时本发明进行优化,倾斜的数据用map join,即对倾斜数据的主键进行一个分割,避免倾斜的主键全部分配进一个计算,进行分布式的表连接操作;不倾斜的数据用普通的join,即直接按主键进行表的连接操作,最终合并得到完整的结果。
[0030] 步骤50,根据步骤40优化得到的初步map结果,再用Driver  调用编译器 Compiler,将接收到的 HiveQL 语句转换成由 MapReduce 任务的 DAG 组成的策略,策略由元数据和 HDFS 操作组成,最后将任务以拓扑顺序提交到执行引擎上,完成数据的分析计算任务——即按照查询条件进行分布式查询。MapReduce的输入来自于已经导入到HDFS集群中的文件,这些文件均匀分布在所有节点中,运行一个MapReduce程序会首先在部分或者所有节点中运行mapping任务,所有mapping任务都是等价的,每个mapping任务都不会与其他mapping交换信息,也不会意识到其他mapping的存在,mapping阶段完成后,节点之间产生的中间键值对可能会进行互相交换,将拥有相同key的值,例如同一个访问者IP提交到同一个Reducer,整个MapReduce过程中,节点之间的互相通信就仅可能在这一步发生,与mapping任务一样,reducing任务也不会与其他reducing任务互相通信,Hadoop MapReduce通过自动完成数据转移和重启失败节点上的仟务来保证任务执行的可靠性。在此基础上,在map过程之后,reduce过程之前,我们还可以引入组合函数combiner,对map过程输出的数据进行优化,实现本地key的聚合,对map输出的key排序,value进行迭代;map过程中对产生的数据会进行一个合并merge的操作,将产生的数据按主键合并,combiner函数还可以根据需要设置在map产生的结果进行merge之前还是之后运行,尤其是大量结果时,大大的减少map 任务对Reduce 任务的数据拷贝。
[0031] 步骤60,对数据进行分割:首先将测试样本集平均分割成M 份(由InputFormat 负责将数据块划分为InputSplit),并对数据格式进行统一(格式化为>,其中,id 代表由访问者IP和访问日期组成的编号;Y代表用户当前访问的页面;X 代表参照,即用户在访问页面Y 之前停留的页面。然后, map 操作是对输入的每个记录进行扫描,将数据集按照上述格式进行初始化;经过map 操作后,得到中间结果<,1>,即有一个用户从页面Y 访问了页面X;Reduce操作则将中间结果按照具有相同的页面跳转访问方式进行合并得到输出结果<,n>,其中,n 代表访问路径X—>Y 的频度。其次,每个子群体(即前述分割得到的数据块)分别将Reduce 操作的结果转换为链表结构,链表头部保存k 值。链表结构图如图2所示,其中,k 代表染色体也就是链表长度;X,Y,Z,R代表网页。
[0032] 步骤70,应用高度并行的全局随机化搜索的遗传算法子群体内部进行选择、交叉等遗传进化操作:首先从父代染色体中随机选择2 条染色体,然后随机生成插入位置Ins、删除位置Del、插入删除长度Len。接着比较2 段染色体是否等长,如果相等,则判断头尾是否有重合,有,则连接生成新的染色体,否则,不生成子代染色体;如果不等长,则判断插入和删除的2 段基因是否相同,如果相同,则合并为一条染色体作为新的染色体,否则,不生成子代染色体。当遗传代数为50 的倍数时,群体间进行联姻操作。每个子群体一直重复上述操作,直到k 值不再变化,当遗传代数为50 的倍数时,群体间进行联姻操作。每个子群体一直重复上述操作,直到k 值不再变化,退出遗传算法。通过上述操作可以得到一个页面的访问路径,而且处理的Web 日志文件大小不会影响算法的有效性。
[0033] 上述步骤70和80在数据分析过程中将数据分割技术和遗传算法结合起来,专门用于Hadoop /Hive集群环境中的Web 日志分析。
[0034] 步骤80,将数据查询与分析部分得出的数据装载进 Mysql 数据库中,按照需求将数据分析的结果以友好界面形式展示给用户。例如,某个站点、页面、数据中心访问次数的查询,访客情况的分析,其他比如对于某一web页面来说过去某一段时间内访问失败的比例,或者用户点击顺序跟URL 的排名,都可以查询分析出来。
[0035] 本发明方案所公开的技术手段不仅限于上述实施方式所公开的技术手段,还包括由以上技术特征任意组合所组成的技术方案。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围。