今天照着《hadoop实战》写了个小例子,解析tomcat日志统计各个浏览器的访问次数
- package com.ice.stat;
- import java.io.IOException;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- import org.apache.hadoop.fs.Path;
- import org.apache.hadoop.io.IntWritable;
- import org.apache.hadoop.io.Text;
- import org.apache.hadoop.mapreduce.Job;
- import org.apache.hadoop.mapreduce.Mapper;
- import org.apache.hadoop.mapreduce.Reducer;
- import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
- import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
- public class TomcatLog{
- static class TomcatMapper extends Mapper<Object, Text, Text, IntWritable> {
- private static final IntWritable one = new IntWritable(1);
- private static Pattern pattern = Pattern.compile("([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),(.*)");
- protected void map(Object key, Text value,
- Context context) throws IOException ,InterruptedException {
- String line = value.toString();
- System.out.println(line);
- Matcher m = pattern.matcher(line);
- if(m.matches()){
- String agent = m.group(9).toLowerCase();
- if(agent.contains("chrome")){
- agent = "chrome";
- }else if(agent.contains("safari")){
- agent = "safari";
- }else if(agent.contains("firefox")){
- agent = "firefox";
- }else{
- agent = "other";
- }
- Text t = new Text(agent);
- context.write(t, one);
- }
- };
- }
- static class TomcatReducer extends Reducer<Text, IntWritable, Text, IntWritable>{
- protected void reduce(Text key, java.lang.Iterable<IntWritable> value, org.apache.hadoop.mapreduce.Reducer<Text,IntWritable,Text,IntWritable>.Context context) throws IOException ,InterruptedException {
- int count = 0;
- for(IntWritable v : value){
- count = count + v.get();
- }
- context.write(key, new IntWritable(count));
- };
- }
- public static void main(String[] args) throws Exception {
- if(args.length != 2){
- System.err.println("参数个数不对");
- System.exit(-1);
- }
- Job job = new Job();
- job.setJarByClass(TomcatLog.class);
- FileInputFormat.addInputPath(job, new Path(args[0]));
- FileOutputFormat.setOutputPath(job, new Path(args[1]));
- job.setMapperClass(TomcatMapper.class);
- job.setReducerClass(TomcatReducer.class);
- job.setOutputKeyClass(Text.class);
- job.setOutputValueClass(IntWritable.class);
- System.exit(job.waitForCompletion(true) ? 0 : 1);
- }
- }
日志样例:
- 172.16.2.12,-,-,[06/Sep/2011:10:03:13 +0800],GET /icestat/jpivot/toolbar/sort-asc-up.png HTTP/1.1,200,336,-,Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2)
- 172.16.2.12,-,-,[06/Sep/2011:09:48:17 +0800],GET /icestat/ HTTP/1.1,200,171,http://10.65.11.241:8080/icestat/,Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.43 Safari/534.24
把日志放入hdfs
- hadoop fs -put icestat_access_log.2011-09-06.txt icestat_access_log.2011-09-06.txt
分析日志
- hadoop jar tomcatLog.jar icestat_access_log.2011-09-06.txt output6
查看输出
- [root@xxx hadoop-0.20.2]# hadoop fs -cat output6/part-r-00000
- 11/09/06 00:18:54 WARN conf.Configuration: DEPRECATED: hadoop-site.xml found in the classpath. Usage of hadoop-site.xml is deprecated. Instead use core-site.xml, mapred-site.xml and hdfs-site.xml to override properties of core-default.xml, mapred-default.xml and hdfs-default.xml respectively
- 11/09/06 00:18:54 WARN fs.FileSystem: "xxx :9000" is a deprecated filesystem name. Use "hdfs://xxx :9000/" instead.
- 11/09/06 00:18:54 WARN fs.FileSystem: "xxx :9000" is a deprecated filesystem name. Use "hdfs://xxx :9000/" instead.
- 11/09/06 00:18:54 WARN fs.FileSystem: "xxx :9000" is a deprecated filesystem name. Use "hdfs://xxx :9000/" instead.
- chrome 58
- firefox 23
- other 49
- safari 5
http://dsbjoe.iteye.com/blog/1166698
相关推荐
基于Hadoop网站流量日志数据分析系统 1、典型的离线流数据分析系统 2、技术分析 - Hadoop - nginx - flume - hive - mysql - springboot + mybatisplus+vcharts nginx + lua 日志文件埋点的 基于Hadoop网站流量...
基于Hadoop部署实践对网站日志分析 1. 项目概述 本次要实践的数据日志来源于国内某技术学习论坛,该论坛由某培训机构主办,汇聚了众多技术学习者,每天都有人发帖、回帖。至此,我们通过Python网络爬虫手段进行数据...
至此,我们通过Python网络爬虫手段进行数据抓取,将我们网站数据(2013-05-30,2013-05-31)保存为两个日志文件,由于文件大小超出我们一般的分析工具处理的范围,故借助Hadoop来完成本次的实践。 使用python对原始...
hadoop web tomcat上传文件,自己写的一个WEB只有上传文件功能,hadoop.rar是已经发布的解压直接放到TOMCAT WEBAPPS下就可以运行
网站访问日志,可以用来进行Hadoop pig分析使用
基于Hadoop集群的分布式日志分析系统研究
查看网络日志是调查系统故障 监控系统运行状况的重要手段 管理员可以查看在某段时间内所发生的事件 也可以通过对 ...算框架 设计并实现了一套基于 Hadoop 的网络日志分析系统 实验证明该系统是有效而实用的
基于Hadoop网站流量日志数据分析系统项目源码+教程.zip网站流量日志数据分析系统 典型的离线流数据分析系统 技术分析 hadoop nginx flume hive sqoop mysql springboot+mybatisplus+vcharts 基于Hadoop网站流量日志...
Hadoop分析气象数据完整版源代码(含Hadoop的MapReduce代码和SSM框架) 《分布式》布置了一道小作业,这是作业的所有代码,里面包含了Hadoop的MapReduce代码、和SSM框架显示数据的代码
基于Hadoop 集群的日志分析系统的设计与实现.docx基于Hadoop 集群的日志分析系统的设计与实现.docx基于Hadoop 集群的日志分析系统的设计与实现.docx基于Hadoop 集群的日志分析系统的设计与实现.docx基于Hadoop 集群...
利用hadoop集群处理分析日志文件
基于Hadoop的Web日志挖掘 海量数据 访问日志分析
java项目 基于Hadoop对网站日志数据分析 使用MapReduce框架进行分析,并包含150M的网站日志数据
基于Hadoop的离线网站日志分析
,Hadoop 技术已经在互联网领域得到了广泛的应用。...同样也得到了许多公司的青睐,如百度主要将Hadoop 应用于日志分析和网页数据库的数据 挖掘;阿里巴巴则将Hadoop 用于商业数据的排序和搜索引擎的优化等。
这个就是拿linux shell写的脚本,用来分析hadoop运行时的错误日志
基于Hadoop的Web日志挖掘.pdf
基于Hadoop数据分析系统设计(需求分析).docx 随着云时代的来临,大数据也吸引越来越多的关注,企业在日常运营中生成、积累的用户网络行为数据。这些数据是如此庞大,计量单位通常达到了PB、EB甚至是ZB。Hadoop作为一...