Hadoop.2.x_WebUV示例
一、网站基本指标(即针对于网站用户行为而产生的日志中进行统计分析)
1. PV:网页浏览量(Page View页面浏览次数,只要进入该网页就产生一条记录,不限IP,统计点每天(较多)/每周/每月/..)
2. UV:独立访客数(Unique Vistor,以Cookie为依据,同一天内一个用户多次访问,只记为一个)
3. VV:访客的访问次数(Visit View,以Session为依据,访客访问网站到关掉该网站所有页面即记为一次访问)
4. IP:独立IP数(即记录不同IP,同一IP访问多次算作一次)
5. 通常网站流量(traffic)是指网站的访问量,是用来描述访问一个网站的用户数量以及用户所浏览的网页数量等指标
对于虚拟空间商来说流量是指:用户在访问网站过程中,产生的数据量大小
二、UV统计示例(也就是每天每个省份有多少人访问了该网站)
1. 分析需求
1> 我们得到的是怎样的数据,找出共同点,会议map,shuffle,reduce都做了什么事
2> 我们想要怎样的数据,列举出来
2. 实施计划注意的地方
1> 数据以什么分隔,是否我们需要自定义数据类型
2> 大致上我们需要过滤掉无效的记录
使用自定义数据类型将我们需要的字段组合起来
然后根据省份对记录累加(去重阶段)
3> 数据类型可以不定义,使用Text将字段值组合即可
然后转到reduce方法,建立hashMap对于数据根据时间和省份递增存储
在cleanup中组合成想要的输出数据即可
三、UV统计代码示例
WebUvMr.java
============
package com.bigdata_senior.WebUvMr;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Set; import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
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 WebUvMr { //Mapper Class
private static class WordCountMapper extends Mapper<LongWritable, Text, Text, NullWritable>{ private Text mapOutKey = new Text();
@Override
public void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException { String lineValue = value.toString();
String [] strValue = lineValue.split("\t");
if(30 > strValue.length){
return;
}
String guidIdValue = strValue[5];
if(StringUtils.isBlank(guidIdValue)){
return;
}
String trackTimeValue = strValue[17];
if(StringUtils.isBlank(trackTimeValue)){
return;
}
String dateValue = trackTimeValue.substring(0,10);
Integer proviceIdValue = Integer.MAX_VALUE;
try{
if(StringUtils.isBlank(strValue[23])){
return;
}
proviceIdValue = Integer.valueOf(strValue[23]);
}catch(Exception e){
return;
} mapOutKey.set(dateValue+"\t"+proviceIdValue+"_"+guidIdValue);
//System.out.println("key--> "+mapOutKey+" value--> "+NullWritable.get());
context.write(mapOutKey, NullWritable.get());
}
} //Reduce Class
private static class WordCountReduce extends Reducer<Text, NullWritable, Text, LongWritable>{ private Map<String,Integer> dateMap;
private Text outputKey = new Text();
private LongWritable outputvalue = new LongWritable(); @Override
protected void setup(Context context) throws IOException,
InterruptedException {
dateMap = new HashMap<String,Integer>();
} @Override
public void reduce(Text key, Iterable<NullWritable> values,Context context)
throws IOException, InterruptedException { String date = key.toString().split("_")[0];
if(dateMap.containsKey(date)){ Integer preUv = dateMap.get(date);
//System.out.println("====-> "+preUv);
Integer uv = preUv + 1;
dateMap.put(date, uv);
}else{
dateMap.put(date, 1);
}
//System.out.println(dateMap.toString());
} @Override
protected void cleanup(Context context) throws IOException,
InterruptedException { Set<String> dateSet = dateMap.keySet();
//System.out.println(dateSet.toString());
for(String date : dateSet){
Integer uv = dateMap.get(date);
outputKey.set(date);
outputvalue.set(uv);
System.out.println("result:-->key "+outputKey+" value-->"+outputvalue);
context.write(outputKey, outputvalue);
}
}
} //Driver
public int run(String[] args) throws Exception { Configuration configuration = new Configuration();
Job job = Job.getInstance(configuration, this.getClass().getSimpleName());
job.setJarByClass(this.getClass()); //input
Path inPath = new Path(args[0]);
FileInputFormat.addInputPath(job,inPath); //output
Path outPath = new Path(args[1]);
FileOutputFormat.setOutputPath(job, outPath); //mapper
job.setMapperClass(WordCountMapper.class);
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(NullWritable.class); //Reduce
job.setReducerClass(WordCountReduce.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(LongWritable.class); //submit job
boolean isSuccess = job.waitForCompletion(true); return isSuccess ? 0 : 1;
} public static void main(String[] args) throws Exception { args = new String[]{
"hdfs://hadoop09-linux-01.ibeifeng.com:8020/user/liuwl/tmp/webuv/input",
"hdfs://hadoop09-linux-01.ibeifeng.com:8020/user/liuwl/tmp/webuv/output4"
};
//run job
int status = new WebUvMr().run(args);
System.exit(status);
}
}
Hadoop.2.x_WebUV示例的更多相关文章
- 【爬坑】运行 Hadoop 的 MapReduce 示例卡住了
1. 问题说明 在以伪分布式模式运行 Hadoop 自带的 MapReduce 示例,卡在了 Running job ,如图所示 2. 解决过程 查看日志没得到有用的信息 再次确认配置信息没有错误信息 ...
- Hadoop Map/Reduce 示例程序WordCount
#进入hadoop安装目录 cd /usr/local/hadoop #创建示例文件:input #在里面输入以下内容: #Hello world, Bye world! vim input #在hd ...
- hadoop: hdfs API示例
利用hdfs的api,可以实现向hdfs的文件.目录读写,利用这一套API可以设计一个简易的山寨版云盘,见下图: 为了方便操作,将常用的文件读写操作封装了一个工具类: import org.apach ...
- Hadoop - WordCount代码示例
文章来源:http://www.itnose.net/detail/6197823.html import java.io.IOException; import java.util.Iterator ...
- Hadoop应用程序示例2
- Hadoop应用程序示例
- Hadoop: MapReduce2的几个基本示例
1) WordCount 这个就不多说了,满大街都是,网上有几篇对WordCount的详细分析 http://www.sxt.cn/u/235/blog/5809 http://www.cnblogs ...
- Hadoop示例程序WordCount编译运行
首先确保Hadoop已正确安装及运行. 将WordCount.java拷贝出来 $ cp ./src/examples/org/apache/hadoop/examples/WordCount.jav ...
- 实训任务02:Hadoop基础操作
实训任务02:Hadoop基础操作 班级 学号 姓名 实训1:创建测试文件上传HDFS,并显示内容 需求说明: 在本地计算机上创建测试文件helloH ...
随机推荐
- 安装pyspider
费了三个小时,换了很多版本的Python pip lxml,最终选择安装anaconda2 非常顺利 运行pyspider后localhost:500正常显示 开森
- Linux学习笔记(23) Linux备份
1. 备份概述 Linux系统需要备份的数据有/root,/home,/var/spool/mail,/etc及日志等其他目录. 安装服务的数据需要备份,如apache需要备份的数据有配置文件.网页主 ...
- RDLC的部署(无法找到Microsoft.ReportViewer.ProcessingObjectModel.dll文件)
CMD命令:C:\Windows\assembly\GAC_MSIL\ rdlc 相比微软的其他产品来说,做得还真是够烂的了,比水晶报表也烂得多. 但不知为何我还是宁可先择 rdlc.并且渐渐上手了. ...
- CSS3详解:background
CSS3对于background做了一些修改,最明显的一个就是采用设置多背景,不但添加了4个新属性,并且还对目前的属性进行了调整增强. 1.多个背景图片 在css3里面,你可以再一个标签元素里应用多个 ...
- Spring常用工具类
Spring框架下自带了丰富的工具类,在我们开发时可以简化很多工作: 1.Resource访问文件资源: 具体有: ResourceUtils.getFile(url); FileSystemReso ...
- Ajax实现点击省份显示相应城市
功能:不用级联效果,自己写ajax,从接口读取省份城市数据,实现点击省份显示相应城市.后端根据省份ID,给前端返回城市. 一.DOM结构(套用blade模板) <div class=" ...
- Python小例子(判断质数)
只能被自己或者1整除的数为质数 num = int(input('请输入一个数:')) if num > 1: # 查看因子 for i in range(2, num): if (num % ...
- 使用Soapui测试webservice接口
本来想自己写一个的,但下面这个资料比较详细(截图和步骤细节),就省事了,具体内容见: http://blog.csdn.net/oracle_microsoft/article/details/568 ...
- jQuery入门第一天
使用jQuery之前,我们需要加一些代码到HTML文件中. 首先在页面顶端增加一行script元素,然后写上结束符. 浏览器会运行script 里所有的Javascript,包括jQuery. 在你的 ...
- HTML元素的属性
HTML元素的属性,每个元素都有多个属性值 <p>段落标记</p> <font size=“”>字体大小标记</font>size取值1-7 <h ...