基于大数据平台的教学资源共享系统访问量实时统计

2018-09-05 10:19骆金维曾德生潘志宏刘陪雄
智能计算机与应用 2018年3期

骆金维 曾德生 潘志宏 刘陪雄

文章编号: 2095-2163(2018)03-0148-07中图分类号: 文献标志码: A

摘要: 关键词: based on big data platform

(1 GuangDong Innovative Technical College, Dongguan Guangdong 523960, China;

2 XINHUA College of sun YAT-SEN University, Guangzhou 510520, China;

3 Guangdong Polytechnic of Environmental Protection Engineering,Foshan Guangdong 528216, China)

Abstract: In the era of big data, the number of data shows geometric level growth. The traditional single server architecture's teaching resource sharing system has been unable to store and process large amounts of data, so it is required to build large data platform for storage processing. The teaching resource sharing system based on big data platform is to build teaching resource sharing system in educational informatization. Its storage capacity is large, and the amount of data processing is large. While users access the teaching resources and real-time count data access to teaching resources, big data platform could be built,which uses Hadoop distributed file storage and achieve real-time access and statistics of teaching resources through spark memory computing, then uses data visualization technology to indicate users access statistics, in order to view the usage of teaching resources in the users. The research provides a strong basis for the future construction of teaching resources.

Key words:

基金项目:

作者简介:

通讯作者:

收稿日期: 引言

互联网技术不断发展,其信息数据量正呈现爆炸式增长,信息化技术已进入大数据时代。在大数据时代对数据的存储与处理要求更高,可利用大数据技术解决传统的基于单机服务器进行教学资源共享时对用户访问日志数据不能进行实时统计分析的问题。当用户点击教学资源共享平台的教学资源时,后台Web服务器会产生一个对应访问日志文件,这个日志文件包含IP地址、访问用户名、访问时间等信息,利用大数据技术对日志记录文本文件进行处理、统计教学资源访问使用情况,为资源管理及后续建设提供一定的参考。

大数据处理技术是利用服务器集群的方式解决单台服务器处理不了的技术问题,当存储的数据量以及要处理的计算量非常大时,单台服务器显得力不从心,应搭建服务器集群的方式进行分布式存储和计算才能满足数据的存储及处理。对基于大数据平台的教学资源共享系统访问量进行实时统计时,需要先搭建Hadoop分布式系统来存储相关教学资源数据,然后利用Flume收集服务器中的日志数据,接着对日志记录数据进行清洗并存储在Hadoop的HDFS文件系统上,再通过Spark技术对HDFS上的数据进行实时计算处理,并将计算结果存储在HBase中,通过Sqoop把数据导出到MySQL等关系型数据库中,最终通过可视化技术将统计分析的数据以图形图像的形式展现给用户。

1相关技术介绍

利用大数据技术实时统计用户访问教学资源情况,先要解决教学资源数据存储及处理問题,需搭建基于大数据的教学资源共享平台,通过对用户访问教学资源的日志记录信息进行采集清洗统计处理,了解教学资源的使用情况,系统设计实现过程中需要利用如下大数据技术。

1.1Hadoop

Hadoop是大数据处理的基本平台,进行离线计算处理的基本工具。其核心技术包括Hadoop Distributed File System、Hadoop MapReduce、Hadoop Common、Hadoop Yarn 4大模块。基于大数据平台的教学资源共享系统中,用户访问教学资源情况统计充分利用Map-Reduce分布式计算框架及HDFS分布式文件存储系统,其MapReduce分布式模式用户编写的程序分成Mapper、Reducer、Driver(提交运行mr程序的客户端)3个部分。Mapper的输入数据及输出数据均是Key—Value对形式。 Mapper中的业务逻辑写在mapper()方法中,mapper()方法(maptask进程)对每一个调用一次,Reducer的输入数据类型对应Mapper的输出数据类型。Reducer的业务逻辑写在reducer()方法中,Reducer任务进程对每一组相同k的组调用一次reducer()方法。Mapper和Reducer均继承各自的父类,整个处理程序需要一个Drvier来进行提交。

1.2HBase

HBase非关系型数据库是基于Google Bigtable实现的开源、分布式、可伸缩的列式存储数据库,是Hadoop生态的重要一环。基于Storm、Spark等框架的数据处理方案中也可利用其进行数据存储。HBase的结构包括表(table)、行(row)、列族(column family)、列(column)、单元格(cell)、版本(version)等。 一张表中包含若干行, 一行包括一个行键(row key)和若干列族,一张表中的行 按照行键排序 ,并用行键作为索引。 每个列族包含若干个列, 列族需要在建表时预定义,运行期间可以动态加入新的列 。在物理层面,HBase的数据存储是在列族这一层级进行组织,每个列族单獨存储。 每个列都归属于某个列族,以列族名作为前缀,通常使用 列族名 的形式来标识一个列。 存储的每一个值存放在一个单元格中,由 [行,列,版本号] 来唯一指向一个单元格。版本号默认是时间戳形式,同一列中可能包含若干单元格,这些单元格由版本号唯一区分, 根据版本号降序排列 。HBase架构如图1所示。

1.3Flume

Flume是具有高可用性、高可靠性、分布式海量日志采集、聚合和传输的系统。可构建扩展的分布式系统来收集大量数据流,把Web服务器上的数据进行采集,有基于数据流的简单灵活的体系结构。具有可调的可靠性机制和许多故障转移和恢复机制,具有健壮性和容错性。其使用一个简单的可扩展的数据模型,允许联机分析应用程序。采集日志数据流程如图2所示。

1.4Sqoop

Sqoop是实现数据迁移的工具,可实现Hadoop上的HDFS数据和关系数据库服务器之间进行传输数据,可以将MySQL、Oracle等关系型数据导入到Hadoop的HDFS、Hive、HBase等数据存储系统中;亦可以将Hadoop的分布式文件系统HDFS中的数据导出到关系数据库中。将导入或导出命令翻译成mapreduce程序进行实现,在翻译出的mapreduce中主要是对inputformat和outputformat进行定制。Sqoop导入导出流程如图3所示。

1.5Hive

Hive是基于Hadoop的一个数据仓库,可将结构化的数据文件映射为一张数据库表。提供简单的SQL查询功能,管理存储在分布式系统上的数据集。可将SQL语句转换成MapReduce作业程序进行运行,通过类SQL语句快速实现MapReduce统计。其适合数据仓库的统计分析,Hive的体系结构如图4所示。

1.6Spark

Spark是一种大数据计算框架,类似于Hadoop的MapReduce,是通用的大数据快速处理引擎,使用一个技术堆栈解决大数据领域的一些计算任务。在内存中处理及运行速度较快,但不具有文件管理功能。Spark最主要的核心技术是Resilient Distributed Datasets 即弹性分布式数据集,对数据的操作转换成为RDD的操作。Spark由Spark RDD、Spark SQL、Spark Streaming、MLlib、GraphX等组成,解决大数据领域中离线批处理、交互式查询、实时流计算、机器学习与图计算等任务和问题。Spark 整体架构如图5所示。行Spark核心编程时先要创建一个代表和包含了Spark应用程序的输入源数据的RDD,在创建了初始的RDD之后,才可以通过Spark Core提供的transformation算子对该RDD进行转换,来获取其它RDD。Spark Core提供了使用程序中的集合创建RDD、本地文件创建RDD、HDFS文件系统创建RDD的方式。

Spark Streaming是一种Spark提供的对于大数据进行实时计算的一种框架,是Spark Core API的一种扩展,用于进行大规模、高吞吐量、容错的实时数据流的处理。支持从Kafka、Flume、Twitter、ZeroMQ、Kinesis、TCP Socket等多种数据源中读取数据,使用类似高阶函数的复杂算法来进行数据处理。例如map、reduce、join和window,处理后的数据可以被保存到文件系统、数据库等存储中。处理过程如图6所示。

Spark Streaming基本工作原理如下:接收实时输入数据流,将数据拆分成多个batch,每收集1秒的数据封装为一个batch,将每个batch交给Spark的计算引擎进行处理,最后会生产出一个结果数据流。其工作原理如图7所示。

Spark SQL支持对Hive中存储的数据进行读写,操作Hive中的数据时,必须创建HiveContext,而不是SQLContext。HiveContext继承自SQLContext,但是增加了在Hive元数据库中查找表,以及用HiveQL语法编写SQL的功能。除了sql()方法,HiveContext还提供了hql()方法,从而用Hive语法来编译sql。使用HiveContext,可以执行Hive的大部分功能,包括创建表、向表中导入数据以及用SQL语句查询表中的数据。

1.7Azkaban

Azkaban是应用于Hadoop生态圈的任务调度器,可以调度linux命令及mapreduce、spark、pig、java、hive程序、脚本工作流等任务。简单的任务调度可直接使用linux的crontab来定义,而复杂的任务调度,需要开发调度平台或使用原有的开源调度系统。 Azkaban是用来做Hadoop相关任务调度的调度器,主要由web server、executor server、mysql三个关键部件组成。在一个工作流内以一个特定的顺序运行一组工作流程。Azkaban使用job配置文件建立任务之间的依赖关系,并提供易于使用的web用户界面维护和跟踪的工作流。Azkaban组成结构如图8所示。

1.8数据可视化技术

数据可视化技术是利用计算机图形学和图像处理技术,将数据转换成图形或图像在屏幕上显示出来,并进行交互处理的理论、方法和技术。为便于查看用户访问教学资源情况,利用数据可视化技术将统计结果以图表的方式显示出来,图表比数据表更有表现力,更直观形象容易理解,以便于进行分析。并利用大数据可视化技术将统计的结果以图形图像的方式展现出来,如使用Echart等图形可视化技术构建静态的HTML页面进行显示。

2系统分析

基于大数据平台的教学资源共享系统访问量实时统计主要是当用户点击教学资源共享平台的教学资源时,后台服务器会产生一个日志信息,记录用户访问日志的行为。这个日志信息包含IP地址、用户名、訪问时间、访问的模块、地址使用的方式等信息。通过日志信息进行采集整理,可以得到网站页面的访问量、网站的黏性。对用户访问网站行为进行分析,获得网站访问量基本数据,对有关数据进行统计、分析,从中发现用户访问网站的规律,并将这些规律与今后教学资源建设等相结合,从而发现教学资源的使用情况,被用户接受程度,用户访问的时间等情况。系统结构如图9所示。

对用户行为日志数据分析有利于对教学资源平台建设的使用程度进行考量,为今后的教学资源建设提供参考借鉴意义。用户行为日志数据分析包含以下内容:用户的来源地区、来路域名和页面、 用户在网站的停留时间、跳出率、回访者、新访问者、回访次数、回访相隔天数、 注册用户和非注册用户,分析两者之间的浏览习惯、用户所使用的搜索引擎、关键词、关联关键词和站内关键字、用户选择的入口形式(广告或者网站入口链接)、用户访问网站流程、 用户在页面上的网页热点图分布数据、网页覆盖图数据、用户在不同时段的访问量、用户对于网站的字体颜色的喜好程度等进行分析。通过对用户行为日志数据的分析,可以让资源管理者更加详细、清楚地了解用户的行为习惯,从而找出共享平台、课程资源、教学资源存在的问题,有助于教学资源建设改进提高。系统组件结构如图10所示。

3系统设计

基于大数据平台的教学资源共享系统是在基于Hadoop平台上建立的课程教学资源共享平台,其系统层次架构设计主要有终端接入层(pc机、笔记本、瘦终端、平板电脑、智能手机等终端设备);业务应用层(课程资源存储、课程资源搜索、课程资源推荐、以及用户访问教学资源统计)。其中底层架构的硬件平台主要用虚拟化技术对服务器硬件进行虚拟化,将一台物理服务器虚拟抽象为若干逻辑计算机、计算、存储、网络等资源脱离真实的环境而在虚拟环境下运行。在同一台服务器上实现同时运行多台逻辑计算机,每台逻辑计算机可独立运行完全不同的操作系统,有效的隔离资源,提高计算机工作效率。

业务应用层中的用户访问教学资源统计业务是在虚拟化硬件基础上安装搭建Hadoop分布式文件系统,部署安装Hive、HBase、Flume、Azkaban、 Sqoop、MySQL、Spark等软件系统。当用户点击共享平台中的教学资源时,通过socket或者http协议传输数据到Web服务器,Web服务器apache、Nginx、Tomcat等接收到信息后会在相应的目录下产生日志记录数据;使用linux系统的定时系统或开发程序和脚本对日志记录数据进行初步处理;Flume监控目录,当受监控的目录有变化时,Flume进行日志记录数据采集处理,然后交给Hadoop的HDFS文件系统或Hive数据仓库。然后通过SparkStreaming实时流处理,对关键信息字段进行分类统计。系统数据处理过程如图11所示。

日志数据采集清洗整理后,需要编写MapReduce程序来过滤数据,并将相关数据存储在Hadoop的HDFS文件系统中。使用Hive对每时、每天、每月访问教学资源数据进行统计,Hive 数据和Hive通过脚本进行绑定,然后通过Sqoop将Hive的分析结果数据导入MySQL数据库 ,最后通过JavaWeb展现页面,整个处理过程可以通过搭建Azkaban服务器来进行统一调度管理。

4系统实现

基于大数据平台的教学资源共享系统由多台服务器支持。其中6台服务器组合成一个Hadoop集群并安装Spark;3台安装Zookeeper;3台安装Flume;3台服务器安装HBase;3台服器组成一个Web服务器集群;2台服务器组成一个查询接品服务器和前端展示服务器集群。系统间数据处理流程如图12所示。

一个完整的日志数据统计分析系统通常都是由大量任务单元组成的,分布式处理技术是将大的计算任务分配给集群中的各个计算节点进行计算,完成计算任务后再进行合并。基于大数据平台的教学资源共享系统用户访问教学资源实时统计时数据源是从linux系统服务器shell脚本程序开始运行,设置crontab程序实现将日志数据实时传递Flume服务,通过Hadoop先将原始数据同步到HDFS上;借助MapReduce计算框架对原始数据进行转换,生成的数据以分区表的形式存储到多张Hive表中;需要对Hive中多个表的数据进行JOIN处理,得到一个明细数据Hive大表;将明细数据进行复杂的统计分析,得到结果报表信息;然后将数据通过Sqoop导入到关系型数据库MySQL 中,再利用可视化工具把数据库中的数据以图形的方式展现出来。以下是实现对用户访问教学资源系统实时访问统计的部分程序代码。

(1)使用spark-streaming完成数据清洗操作

object DataUtils {

val YYYYMMDDHHMMSS_FORMAT=

FastDateFormat.getInstance("yyyy-MM-dd

HH:mm:ss");

val TARGE_FORMAT = FastDateFormat.

getInstance("yyyyMMdd");

def getTime(time: String)={

YYYYMMDDHHMMSS_FORMAT.parse(time).getTime

}

def parseToMinute(time:String)={

TARGE_FORMAT.format(new Date(getTime(time)))

}

def main(args: Array[String]): Unit = {

println(parseToMinute("2017-11-22 01:20:20"))

}

}

(2)针对数据进行分析,清洗数据,过滤出无用数据

val cleanData = logs.map(line =>{

val infos = line.split("\\t")

val url = infos(2).split(" ")(1)

var categaryId = 0

if(url.startsWith("/www")){

categaryId = url.split("/")(2).toInt

}

ClickLog(infos(0),DataUtils.parseToMin(infos(1)),categaryId,infos(4).toInt,infos(3))

}).filter(clickLog=>clickLog.categaryId!=0)

cleanData.print()

(3)保存收集数据到HBase 数据库

cleanLog.map(log=>{

(log.time.substring(0,8)+"_"+log.categaryId,1)

}).reduceByKey(_+_).foreachRDD(rdd=>{

rdd.foreachPartition(partriosRdds=>{

val list = new ListBuffer[CategaryClickCount]

partriosRdds.foreach(pair=>{

list.append(CategaryClickCount(pair._1,pair._2))

})

CategaryClickCountDAO.save(list)

})

})

(4)利用Spark进行日志数据分割业务功能实现(部分代码)

cleanLog.map(log=>{

val referer = log.refer.replace("//","/")

val splits = referer.split("/")

var host = ""

if(splits.length > 2){

host = splits(1)

}

(host,log.categaryId,log.time)

}).filter(_._1!="").map(x =>{

(x._3.substring(0,8)+"_"+x._1+"_"+x._2,1)

}).reduceByKey(_+_).foreachRDD(rdd=>{

rdd.foreachPartition(partitionRecods=>{

val list = new ListBuffer[CategarySearchClickCount]

partitionRecods.foreach(pair=>{

list.append(CategarySearchClickCount(pair._1,pair._2))

})

CategarySearchClickCountDAO.save(list)

})

})

(5)通页面调用数据展示(数据可视化部分代码)

data: (function () {

var datas = [];

$.ajax({

type: "POST",

url: "/sparkweb/CategoryClickCount",

dataType: 'json',

async: false,

success: function (result) {

for (var i = 0; i < result.length; i++) {

{value: 335,

name: '直接访问'}

datas.push({"value": result[i].value, "name":result[i].name})

}

}

})

return datas;

})()

5结束语

基于大数据平台的教学资源共享系统用户访问量比较大,日志文件数量多,计算处理统计日志文件其任务量重,将Hadoop与Spark进行融合。通过Spark Streaming对大数据进行实时计算,有效提高统计效率,达到实时计算效应。搭建基层Hadooop大数据分布式文件存储平台,以供数据存储服务。通过linux系统的Crontab来调度日志文件,供Flume进行采集,由Spark Streaming对数据进行处理统计,统计用户访问量以及资源利用率等指标,将相关的数据存储在数据库服务器中,前端页面将通过调用Echar等图表工具对数据进行可视化展示。

参考文献

[1] 冯兴杰. Hadoop与Spark应用场景研究 [J/OL]. 计算机应用研究,2018,35(9).[2017-10-10].http://www.arocmage.com/article/02-2018-09-065.html.

[2] 李博. 基于Hadoop的超市数据分析系统的设计[J]. 武汉轻工大学学报,2015,34(4)35-39.

[3] 郝增勇. 基于Hadoop用戶行为分析系统设计与实现[D]. 北京:北京交通大学,2014.

[4] 李爽. 基于Spark的数据处理分析系统的设计与实现[D]. 北京:北京交通大学,2015.