1、运用数据剖析,可以帮助相关的运营机构关于数据进行有用的总结,很多的收集作业也会变得更为简单有用。(2)专业的剖析当收集到很多的数据之后,剖析就成为了最为重要的一环。关于杂乱的数据信息进行有用的剖析,可以将数据信息之间的相关内容进行整合,从而可以得出更具有指导性的决策或许信息内容。本项目着眼于企业数据分析价值,随着日志量的增大,企业利用大数据技术处理这些日志,可以从中获取大量信息中分析出各种有用的信息,比如:在我们的项目中,我们需要实现以下目标:(1)HDFS数据存储(2)编写MapReduce进行数据清洗、筛除(3)将日志数据读入hive表中(4)编写 HQL 对日志数据进行多方位统计(5)输
2、出平台中最受欢迎的 Top10 项最受欢迎的课程3. 项目设计3.1 开发平台 Linux ;Hadoop2.7.73.2 项目所需技术Java编程基础 ;Hadoop MapReduce3.3项目流程3.3.1创建静态内部类LogParser,分割解析日志(1)MapReduce简介MapReduce是一种分布式计算模型,是Google提出的,主要用于搜索领域,解决海量数据的计算问题。MR有两个阶段组成:Map和Reduce,用户只需实现map()和reduce()两个函数,即可实现分布式计算。(2)MapReduce执行流程(3)MapReduce的执行步骤:LogParser功能非常的强
3、大,可以分析IIS日志,系统事件日志,CSV,XML等格式日志,同时也支持接口编程可用C#调用LogParser的Com,其效率非常之高,特别是对大的日志文件(几十M几百M甚至几G的文本日志文件),使用LogParser能够快速查出你所要的数据,一些常用的方法在LogParser的帮助文档中都有介绍3.3.2 在Mapper类中LogParser的实例解析筛选日志系统运维,少不了分析系统日志,微软有个工具Log Parser可以帮助你分析日志。它功能强大,使用简单,可以分析基于文本的日志文件、XML 文件、CSV(逗号分隔符)文件,以及操作系统的事件日志、注册表、文件系统、Active Dir
4、ectory。它可以像使用 SQL 语句一样查询分析这些数据,甚至可以把分析结果以各种图表的形式展现出来。Log Parser可以到微软的网站下载,安装完后,就会有命令行的执行程序LogParser.exe,供API使用的LogParser.dll及说明文件LogParser.chm,里面还会有一些Sample Code可以供参考.Log Parser支持的格式很多,输入格式如下:通过 .NET Framework 的 COM interop (COM 交互操作)特性,可以很方便地在 .NET 应用程序中使用 Log Parser,.NET Framework 的 COM interop 是通
5、过 Runtime Callable Wrappers (RCW) 来实现对 COM 的操作的,RCW 是 .NET 中的一个类。Map任务处理读取HDFS中的文件。每一行解析成一个。每一个键值对调用一次map函数。 覆盖map(),接收1.1产生的,进行处理,转换为新的you,1me,1对1.2输出的me,1you,1(可选)对分组后的数据进行归约。详见Combiner3.3.3 实现Reducer类,对Map类中的结果进行处理Reduce任务处理多个map任务的输出,按照不同的分区,通过网络copy到不同的reduce节点上。(shuffle)详见shuffle过程分析对多个map的输出进
6、行合并、排序。覆盖reduce函数,接收的是分组后的数据,实现自己的业务逻辑, 处理后,产生新的对reduce输出的写到HDFS中。回到本实验的内容,实验中将要处理的日志文件如下图所示,红色方框中标注出来的则是需要舍弃的访问记录。我们只保留包含”video”的访问记录。3.3.4 项目流程图4. 开发设计4.1 开发平台Linu 2.;4.2 开发技术Java编程基础;Hadoop Map reduce4.3 开发流程4.3.1创建静态内部类LogParser,分割解析日志(1)日志记录解析类 LogParser static class LogParser public static fin
7、al SimpleDateFormat FORMAT = new SimpleDateFormat( d/MMM/yyyy:HH:mm:ss, Locale.ENGLISH); public static final SimpleDateFormat dateformat1 = new SimpleDateFormat(yyyyMMddHHmmss); public static final SimpleDateFormat dateformat2 = new SimpleDateFormat(EEE MMM ddHH:ss CST yyyy public static void main(S
8、tring args) throws ParseException final String S1 = Fri May 31 00:00:18 CST 2013- LogParser parser = new LogParser(); final String array = parser.parse(S1); System.out.println(样例数据: + S1); System.out.format(解析结果: time=%s, url=%s, traffic=%s, ip=%s, array0, array1, array2, array3); /* * 解析英文时间字符串 * *
9、 param string * return * throws ParseException */ private Date parseDateFormat(String string) Date parse = null; try parse = dateformat2.parse(string); catch (ParseException e) e.printStackTrace(); return parse; * 解析日志的行记录 * param line * return 数组含有5个元素,分别是ip、时间、url、状态、流量 public String parse(String
10、line) String time = parseTime(line); String url = parseURL(line); String traffic = parseTraffic(line); String ip = parseIP(line); return new String time, url, traffic , ip; private String parseTime(String line) String time = line.split(-)0; Date date = parseDateFormat(time); return dateformat1.forma
11、t(date); private String parseURL(String line) String url = line.split()1; return url; private String parseTraffic(String line) String traffic = line.split()2; return traffic; private String parseIP(String line) String ip = line.split()3.trim(); return ip;4.3.2 在Mapper类中LogParser的实例解析筛选日志(2)获Mapper类的
12、实现static class MyMapper extends Mapper LogParser logParser = new LogParser();Text outputValue = new Text();protected void map( LongWritable key, Text value, org.apache.hadoop.mapreduce.Mapper.Context context) throws java.io.IOException, InterruptedException all_count+; final String parsed = logParse
13、r.parse(value.toString(); / 过滤掉非课程学习请求 if(parsed1.length() 28) return; if (!parsed1.substring(23, 28).equals(video) return; outputValue.set(parsed0 + t + parsed1 + + parsed2 + + parsed3); context.write(key, outputValue);4.3.3 实现Reducer类,对Map类中的结果进行处理(3)Reducer类的实现static class MyReducer extends Reduc
14、erprotected void reduce( LongWritable k2, java.lang.Iterable v2s, org.apache.hadoop.mapreduce.Reducer for (Text v2 : v2s) context.write(v2, NullWritable.get();5. 项目总结 访问日志数据清洗的任务主要是筛除掉一些与我们的业务无关的访问记录,我们的项目中只需要保留客户在平台上学习视频课程的记录,因此需要筛除掉访问课程列表记录、编程练习记录。我们要从日志数据中分析得到平台中 top10 项最受欢迎的课程,需要进行以下工作:对每一门课程的被访
15、问量进行统计可以在通过HQL中的 GROUP BY子句做到SELECT ALL | DISTINCT select_expr, select_expr, . FROM table_reference WHERE where_condition GROUP BY col_list HAVING having_condition ORDER BY col_list LIMIT number;本实训项目在教育平台日志的基础上编写 HQL 对日志数据进行了多方位的统计,并输出平台中最受欢迎的 Top10 项最受欢迎的课程。除此之外,我们还可以:统计每门课程的“访问流量”,这样可以对资源进行合理的配置。引入推荐算法,为客户推荐课程、推荐同学
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1