来学伟
(三门峡职业技术学院 信息传媒学院,河南 三门峡 472000)
近年来,随着社会的不断发展,海量数据的挖掘和运用越来越引起人们的重视,而互联网是面向全社会的公众平台,逐渐成为了最便捷最有效的信息收集的渠道,随着大数据技术越来越受到人们的关注,从互联网平台上收集到的信息为基于大数据的统计和挖掘提供了极大的便利[1]。
基于大数据技术进行的数据挖掘在企业决策中越来越受到重视。比如可以通过对某网站平台的日志信息进行统计分析,进而获得该平台的每日访问数量,进一步分析出该网站平台受广大网民的欢迎程度;也可以对某APP应用在某段时间内的下载次数进行统计分析,得到该APP所受欢迎的程度。甚至可以对其进行更深一步的分析挖掘,比如对下载的方式、时间段以及区域做进一步的数据分析挖掘,这样就可以为企业的推广、运营、分析及决策给予有效、可靠的参考数据[2]。
在大数据开发中,首要任务是明确分析目的,即想要从大量数据中得到什么类型的结果,并进行展示说明[3]。明确了分析目的后,我们才能准确根据具体的需求去过滤数据,并通过大数据技术进行数据分析和处理,最后把经过分析的结构以图表文字各种可视化的形式展示给客户,利于客户做出正确的决策。
我们使用Flume来采集网站平台的Nginx服务器上的日志数据文件到分布式文件系统 HDFS中去,接着依据采集到的数据日志文件的格式来开发设计MapReduce程序对数据进行预处理,然后使用Hive对数据进行分析,使用Sqoop工具把分析的结果导出到关系型的数据库MySql中去,最终使用Web系统来实现可视化的数据。
一般情况下,使用比较流行的Flume框架便可以满足我们采集日志文件的需求,搭建 Flume采集系统也比较简单[4],通过把 Agent节点部署在服务器上,来实现把采集来的日志数据汇集到分布式文件系统HDFS上来。核心参数的配置如下,通过Flume采集系统采集后的网站流量日志数据将会汇总到HDFS上进行保存。由于采集的日志数据内容较多,且样式基本类似,用户每访问一次网站,就会留下一条访问信息。
一般情况下,不能直接对收集的日志文件进行数据分析,原因是有很多不合法的数据存在在日志文件之中,清洗掉无意义的、不合法的数据是数据预处理阶段最重要的任务,其次就是把日志数据中的数据格式转变成有利于后面数据分析时的规范的格式,依据需求,快速找出各种主题的相关数据。在数据预处理阶段[5],主要目的就是对收集的原始数据进行清洗和筛选,使用MapReduce技术就可以轻松实现。在实际开发中,数据预处理过程通常不会直接把不合法的数据直接删除,而是对每条数据添加标识字段,从而避免其他业务使用时丢失数据。除此之外,这次数据预处理仅仅是清洗无意义的数据和筛选不合法的数据,并且会读取每一行日志文件数据并且最后输出一条数据信息,而不会再进行其他的操作,这样在使用MapReduce进行处理时,只会涉及到Map阶段。而不会涉及Reduce阶段。在一般情况下,我们都默认ReduceTask值为1,因此在主运行函数中,我们必须设置 Job.setNumReduce-Tasks(0)。
在数据处理环节,需要使用MapReduce技术进行数据预处理,作用是将复杂且没有具体格式的数据进行规范化[6]。因此我们使用Eclipse开发工具来创建一个Maven项目,添加相关的依赖,创建 JavaBean对象,封装日志记录,编写MapReduce程序,执行数据预处理,日志文件被最终采集到 HDFS上,我们需要将编写好的MapReduce程序部署在 Hadoop集群所在的操作系统中,并定时执行该程序,以及FileInputFormat要执行的文件路径也必须是HDFS文件路径。程序执行成功以后,需要到与之相对应的output目录中去查找观察part-m-00000结果文件。数据预处理是根据业务需求,生成符合业务逻辑的结果文件,因此不存在标准的程序代码,我们可以根据自身需求去扩展MapReduce程序以解决实际的业务问题。
(1)设计数据仓库
通过对分析网站流量的项目的分析,我们把数据仓库设计为星状模型,把MapReduce清洗过的数据存储到一张事实表ods_weblog_origin中,该表和原始数据的表产生对应关系,每个字段和数据也产生映射关系[7],尽管这个表记录了所有的数据,但是对于数据进行分析并不方便,为了把分析的数据进行细化,通常会对该表的数据进行加工,即分割原来的表中融合各种信息的数据,得到新的字段,把这个表分接为宽表,这样信息就更加完备,我们把事实表设计好以后,就可以根据需求来设计维度表了。因为该项目只设计了两个字段,一个是日期,一个是平均 PV值。也可以根据需求对其进行扩展。比如访客的地域维度、终端维度等多角度来实现数据分析。
(2)实现数据仓库
ETL是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库维度建模后的表中的过程,目的是将企业中的分散、零乱、标准不统一的数据整合到一起,为企业的决策提供分析依据。数据分析过程是在Hadoop集群上实现[8],主要通过Hive数据仓库工具来实现,因此需要将采集的日志数据经过预处理后,加载到 Hive数据仓库中,从而进行后续的分析过程。首先我们创建数据仓库,然后创建表,导入数据,生成明细表。
数据仓库建设好以后,用户就可以编写Hive SQL语句进行数据分析。在开发中需要哪些统计指标通常是由产品经理提出,而且会不断有新的统计需求产生,数据分析时常见的指标如下。
流量分析,指的是页面点击量,是衡量网站质量的主要指标,流量分析是指所有访问者在指定时间内浏览网页的次数,在日志记录中,一条数据就代表了一次点击量。统计每一天的流量分析是较为常见的需求[9]。
人均浏览量分析,即人均浏览页面数,该指标具体反映了网站对用户的黏性程度,简单地说是用户对该网站的兴趣程度,页面信息越吸引用户,那么用户就会跳转更多的页面。计算人均浏览量是通过总页面请求数量除以去重人数得出。
使用 Hive完成数据分析过程后,就要运用Sqoop将Hive中的数据导出到关系数据库中,方便后续进行数据可视化处理。
随着数据分析流程的结束,接下来就是将关系数据库中的数据展示在Web系统中,将抽象的数据图形化便于非技术人员的决策与分析,我们可以采用ECHarts来辅助实现。
ECHarts是一款商业级数据图表,基于JavaScript的数据可视化图标库,且兼容大部分浏览器,底层是基于Zrender,它包含了许多组件,如坐标系、图例和工具箱等,并在此基础上构建出折线图、柱状图、散点图、饼图和地图等,同时支持任意维度的堆积和多图表混合展现,展现效果功能强大。日志分析系统报表展示是一个纯粹的JavaEE项目,我们采用SSM框架搭建,步骤如下:
Step.1创建项目,添加依赖。
Step.2编写配置文件。
Step.3实现报表展示功能
Step.4创建持久化类,实现 DAO层,实现Service层,实现Controller层,实现页面功能,最后运行,查看效果。
本文讲解利用 Hadoop生态体系的技术解决实际问题,实现介绍系统框架流程,然后逐个讲解各个模块之间的实现方式[10],从数据采集、数据预处理、数据仓库的设计、数据分析、数据导出以及最后可视化处理,详细讲解了系统的环境架构以及业务流程,使用 Hadoop生态体系相关技术完善本项目其他功能。对于大数据应用程序的开发有一定的借鉴意义。