大数据实训项目教育平台日志挖掘Word格式.docx
《大数据实训项目教育平台日志挖掘Word格式.docx》由会员分享,可在线阅读,更多相关《大数据实训项目教育平台日志挖掘Word格式.docx(11页珍藏版)》请在冰豆网上搜索。
![大数据实训项目教育平台日志挖掘Word格式.docx](https://file1.bdocx.com/fileroot1/2023-1/23/1bc3e2b0-9eb5-4aef-a2ac-35d61349d073/1bc3e2b0-9eb5-4aef-a2ac-35d61349d0731.gif)
运用数据剖析,可以帮助相关的运营机构关于数据进行有用的总结,很多的收集作业也会变得更为简单有用。
(2)专业的剖析当收集到很多的数据之后,剖析就成为了最为重要的一环。
关于杂乱的数据信息进行有用的剖析,可以将数据信息之间的相关内容进行整合,从而可以得出更具有指导性的决策或许信息内容。
本项目着眼于企业数据分析价值,随着日志量的增大,企业利用大数据技术处理这些日志,可以从中获取大量信息中分析出各种有用的信息,比如:
在我们的项目中,我们需要实现以下目标:
(1)HDFS数据存储
(2)编写MapReduce进行数据清洗、筛除
(3)将日志数据读入hive表中
(4)编写HQL对日志数据进行多方位统计
(5)输出平台中最受欢迎的Top10项最受欢迎的课程
3.项目设计
3.1开发平台
Linux;
Hadoop2.7.7
3.2项目所需技术
Java编程基础;
HadoopMapReduce
3.3项目流程
3.3.1创建静态内部类LogParser,分割解析日志
(1)MapReduce简介
MapReduce是一种分布式计算模型,是Google提出的,主要用于搜索领域,解决海量数据的计算问题。
MR有两个阶段组成:
Map和Reduce,用户只需实现map()和reduce()两个函数,即可实现分布式计算。
(2)
MapReduce执行流程
(3)
MapReduce的执行步骤:
LogParser功能非常的强大,可以分析IIS日志,系统事件日志,CSV,XML等格式日志,同时也支持接口编程——可用C#调用LogParser的Com,其效率非常之高,特别是对大的日志文件(几十M几百M甚至几G的文本日志文件),使用LogParser能够快速查出你所要的数据,一些常用的方法在LogParser的帮助文档中都有介绍
3.3.2在Mapper类中LogParser的实例解析筛选日志
系统运维,少不了分析系统日志,微软有个工具LogParser可以帮助你分析日志。
它功能强大,使用简单,可以分析基于文本的日志文件、XML文件、CSV(逗号分隔符)文件,以及操作系统的事件日志、注册表、文件系统、ActiveDirectory。
它可以像使用SQL语句一样查询分析这些数据,甚至可以把分析结果以各种图表的形式展现出来。
LogParser可以到微软的网站下载,安装完后,就会有命令行的执行程序LogParser.exe,供API使用的LogParser.dll及说明文件LogParser.chm,里面还会有一些SampleCode可以供参考.
LogParser支持的格式很多,输入格式如下:
通过.NETFramework的COMinterop(COM交互操作)特性,可以很方便地在.NET应用程序中使用LogParser,.NETFramework的COMinterop是通过RuntimeCallableWrappers(RCW)来实现对COM的操作的,RCW是.NET中的一个类。
Map任务处理
读取HDFS中的文件。
每一行解析成一个<
k,v>
。
每一个键值对调用一次map函数。
<
0,helloyou>
<
10,hellome>
覆盖map(),接收1.1产生的<
,进行处理,转换为新的<
输出。
hello,1>
you,1>
me,1>
对1.2输出的<
进行分区。
默认分为一个区。
详见《Partitioner》
对不同分区中的数据进行排序(按照k)、分组。
分组指的是相同key的value放到一个集合中。
排序后:
分组后:
hello,{1,1}>
me,{1}>
you,{1}>
(可选)对分组后的数据进行归约。
详见《Combiner》
3.3.3实现Reducer类,对Map类中的结果进行处理
Reduce任务处理
多个map任务的输出,按照不同的分区,通过网络copy到不同的reduce节点上。
(shuffle)详见《shuffle过程分析》
对多个map的输出进行合并、排序。
覆盖reduce函数,接收的是分组后的数据,实现自己的业务逻辑,<
hello,2>
处理后,产生新的<
对reduce输出的<
写到HDFS中。
回到本实验的内容,实验中将要处理的日志文件如下图所示,红色方框中标注出来的则是需要舍弃的访问记录。
我们只保留包含”video”的访问记录。
3.3.4项目流程图
4.开发设计
4.1开发平台
Linu2.;
4.2开发技术
Java编程基础;
HadoopMapreduce
4.3开发流程
4.3.1创建静态内部类LogParser,分割解析日志
(1)日志记录解析类LogParser
staticclassLogParser{
publicstaticfinalSimpleDateFormatFORMAT=newSimpleDateFormat(
"
d/MMM/yyyy:
HH:
mm:
ss"
Locale.ENGLISH);
publicstaticfinalSimpleDateFormatdateformat1=newSimpleDateFormat(
yyyyMMddHHmmss"
);
publicstaticfinalSimpleDateFormatdateformat2=newSimpleDateFormat(
"
EEEMMMddHH:
ss'
CST'
yyyy"
publicstaticvoidmain(String[]args)throwsParseException{
finalStringS1="
FriMay3100:
00:
18CST2013--
LogParserparser=newLogParser();
finalString[]array=parser.parse(S1);
System.out.println("
样例数据:
+S1);
System.out.format(
解析结果:
time=%s,url=%s,traffic=%s,ip=%s"
array[0],array[1],array[2],array[3]);
}
/**
*解析英文时间字符串
*
*@paramstring
*@return
*@throwsParseException
*/
privateDateparseDateFormat(Stringstring){
Dateparse=null;
try{
parse=dateformat2.parse(string);
}catch(ParseExceptione){
e.printStackTrace();
returnparse;
*解析日志的行记录
*@paramline
*@return数组含有5个元素,分别是ip、时间、url、状态、流量
publicString[]parse(Stringline){
Stringtime=parseTime(line);
Stringurl=parseURL(line);
Stringtraffic=parseTraffic(line);
Stringip=parseIP(line);
returnnewString[]{time,url,traffic,ip};
privateStringparseTime(Stringline){
Stringtime=line.split("
--"
)[0];
Datedate=parseDateFormat(time);
returndateformat1.format(date);
privateStringparseURL(Stringline){
Stringurl=line.split("
)[1];
returnurl;
privateStringparseTraffic(Stringline){
Stringtraffic=line.split("
)[2];
returntraffic;
privateStringparseIP(Stringline){
Stringip=line.split("
)[3].trim();
returnip;
4.3.2在Mapper类中LogParser的实例解析筛选日志
(2)获Mapper类的实现
staticclassMyMapperextends
Mapper<
LongWritable,Text,LongWritable,Text>
{
LogParserlogParser=newLogParser();
TextoutputValue=newText();
protectedvoidmap(
LongWritablekey,
Textvalue,
org.apache.hadoop.mapreduce.Mapper<
.Contextcontext)
throwsjava.io.IOException,InterruptedException{
all_count++;
finalString[]parsed=logParser.parse(value.toString());
//过滤掉非课程学习请求
if(parsed[1].length()<
28){
return;
if(!
parsed[1].substring(23,28).equals("
video"
)){
return;
outputValue.set(parsed[0]+"
\t"
+parsed[1]+"
+parsed[2]+"
+parsed[3]);
context.write(key,outputValue);
}
}
4.3.3实现Reducer类,对Map类中的结果进行处理
(3)Reducer类的实现
staticclassMyReducerextends
Reducer<
LongWritable,Text,Text,NullWritable>
protectedvoidreduce(
LongWritablek2,
java.lang.Iterable<
Text>
v2s,
org.apache.hadoop.mapreduce.Reducer<
for(Textv2:
v2s){
context.write(v2,NullWritable.get());
};
5.项目总结
访问日志数据清洗的任务主要是筛除掉一些与我们的业务无关的访问记录,我们的项目中只需要保留客户在平台上学习视频课程的记录,因此需要筛除掉访问课程列表记录、编程练习记录。
我们要从日志数据中分析得到平台中top10项最受欢迎的课程,需要进行以下工作:
对每一门课程的被访问量进行统计
可以在通过HQL中的GROUPBY子句做到
SELECT[ALL|DISTINCT]select_expr,select_expr,...
FROMtable_reference
[WHEREwhere_condition]
[GROUPBYcol_list]
[HAVINGhaving_condition]
[ORDERBYcol_list]]
[LIMITnumber];
本实训项目在教育平台日志的基础上编写HQL对日志数据进行了多方位的统计,并输出平台中最受欢迎的Top10项最受欢迎的课程。
除此之外,我们还可以:
统计每门课程的“访问流量”,这样可以对资源进行合理的配置。
引入推荐算法,为客户推荐课程、推荐同学