MapReduce清洗日志数据统计PV量
package mapreduce.webpv; import java.io.IOException;
import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
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;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner; public class WebPvMapReduce extends Configured implements Tool { // step 1: Mapper
public static class WebPvMapper extends
Mapper<LongWritable, Text, IntWritable, IntWritable> {
private IntWritable mapOutputKey = new IntWritable();
private IntWritable mapOutputValue = new IntWritable(1); @Override
public void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException { // line value
String lineValue = value.toString(); // spilt
String[] values = lineValue.split("\t"); // url
String urlValue = values[1]; if (StringUtils.isBlank(urlValue)) {
// conuter
context.getCounter("WEBPVMAPPER_CUUNTERS", "URL_BLANK")
.increment(1L);
return;
} if (30 > values.length) { // conuter
context.getCounter("WEBPVMAPPER_CUUNTERS", "LENGTH_LT_30")
.increment(1L); return;
} // province id
String provinceIdValue = values[23]; if (StringUtils.isBlank(provinceIdValue)) {
// conuter
context.getCounter("WEBPVMAPPER_CUUNTERS", "PROVINCEID_BLANK")
.increment(1L);
return;
} Integer provinceId = Integer.MAX_VALUE;
try {
provinceId = Integer.valueOf(provinceIdValue);
} catch (Exception e) {
// conuter
context.getCounter("WEBPVMAPPER_CUUNTERS",
"PROVINCEID_NOT_NUMBER").increment(1L);
return;
} // map outpu key
mapOutputKey.set(provinceId); context.write(mapOutputKey, mapOutputValue);
}
} // step 2: Reducer
public static class WebPvReducer extends
Reducer<IntWritable, IntWritable, IntWritable, IntWritable> {
private IntWritable outputValue = new IntWritable(); @Override
protected void reduce(IntWritable key, Iterable<IntWritable> values,
Context context) throws IOException, InterruptedException {
// temp sum
int sum = 0; // iterator
for (IntWritable value : values) {
sum += value.get();
} // set output
outputValue.set(sum); context.write(key, outputValue);
}
} // step 3: Driver
public int run(String[] args) throws Exception { Configuration configuration = this.getConf(); Job job = Job.getInstance(configuration, this.getClass()
.getSimpleName());
job.setJarByClass(WebPvMapReduce.class); // set job
// 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(WebPvMapper.class);
job.setMapOutputKeyClass(IntWritable.class);
job.setMapOutputValueClass(IntWritable.class); // Reducer
job.setReducerClass(WebPvReducer.class);
job.setOutputKeyClass(IntWritable.class);
job.setOutputValueClass(IntWritable.class); // submit job -> YARN
boolean isSuccess = job.waitForCompletion(true);
return isSuccess ? 0 : 1;
} public static void main(String[] args) throws Exception { Configuration configuration = new Configuration(); args = new String[] {
"hdfs://beifeng01:8020//user/beifeng01/mapreduce/input/testdata/2015082818",
"hdfs://beifeng01:8020//user/beifeng01/mapreduce/output1" }; int status = ToolRunner.run(configuration, new WebPvMapReduce(), args); // exit program
System.exit(status);
}
}
查看结果
$ bin/hdfs dfs -text /user/beifeng01/mapreduce/output1/pa*
1 3527
2 1672
3 511
4 325
5 776
6 661
7 95
8 80
9 183
10 93
11 135
12 289
13 264
14 374
15 163
16 419
17 306
18 272
19 226
20 2861
21 124
22 38
23 96
24 100
25 20
26 157
27 49
28 21
29 85
30 42
32 173
MapReduce清洗日志数据统计PV量的更多相关文章
- 利用mapreduce清洗日志内存不足问题
package com.libc; import java.io.IOException; import java.io.UnsupportedEncodingException; import ja ...
- nginx日志分析及其统计PV、UV、IP
一.nginx日志结构 nginx中access.log 的日志结构: $remote_addr 客户端地址 211.28.65.253 $remote_user 客户端用户名称 -- $time_l ...
- 基于WebForm+EasyUI的业务管理系统形成之旅 -- 数据统计(Ⅳ)
上篇<基于WebForm+EasyUI的业务管理系统形成之旅 -- 首页快捷方式>,主要介绍通过添加首页快捷方式,快速进入各个应用菜单功能. 将常用的菜单功能作为快捷方式,避免由于寻找诸多 ...
- Git 常用命令和统计代码量
摘要 分享Git日常操作中常用的命令,分享如何统计在项目中贡献的代码量. 下面列出Git bash常用命令. 1. git clone **(项目地址) 克隆一个git项目到本地,将git项目拉取到本 ...
- 使用mapreduce对日志进行清洗
网站日志分析项目案例(一)项目介绍:http://www.cnblogs.com/edisonchou/p/4449082.html 网站日志分析项目案例(二)数据清洗:当前页面 网站日志分析项目案例 ...
- 有关“数据统计”的一些概念 -- PV UV VV IP跳出率等
有关"数据统计"的一些概念 -- PV UV VV IP跳出率等 版权声明:本文为博主原创文章,未经博主允许不得转载. 此文是本人工作中碰到的,随时记下来的零散概念,特此整理一下. ...
- 视频网站数据MapReduce清洗及Hive数据分析
一.需求描述 利用MapReduce清洗视频网站的原数据,用Hive统计出各种TopN常规指标: 视频观看数 Top10 视频类别热度 Top10 视频观看数 Top20 所属类别包含这 Top20 ...
- 登录日志的访问日志的 统计 MapReduce
登录日志的访问日志的 统计 MapReduce <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-commo ...
- mapreduce清洗数据
继上篇 MapReduce清洗数据 package mapreduce; import java.io.IOException; import org.apache.hadoop.conf.Confi ...
随机推荐
- Android分享图文到朋友圈代码。
分享到微信朋友圈代码.不好用,最后选择了shareSdk. private static void shareToTimeLine(File file) { Intent intent = new I ...
- 错误: 安装必备组件失败: 安装必备组件失败: SqlInstanceRtc 有关详细信息
错误: 安装必备组件失败: 安装必备组件失败: SqlInstanceRtc 有关详细信息 查看错误得知是安装sqlexpr_x64.exe的时候出现了错误 解决: 通过打开skype镜像,找到sql ...
- 超详细Redis入门教程【转】
这篇文章主要介绍了超强.超详细Redis入门教程,本文详细介绍了Redis数据库各个方面的知识,需要的朋友可以参考下 [本教程目录] 1.redis是什么 2.redis的作者何许人也 3.谁在使 ...
- Struts2学习-Ioc学习
网址:http://blog.csdn.net/qq_22654611/article/details/52606960可以在这个网址学学. 1.新建空项目,然后建立Java EE,在把Java EE ...
- zt C++ list 类学习笔记
C++ list 类学习笔记 分类: C++ 2011-09-29 00:12 7819人阅读 评论(0) 收藏 举报 listc++iteratorvectorcconstructor 双向循环链表 ...
- 优秀的看图工具推荐 —— XnViewMP
XnViewMP是一款非常棒的完全免费图片浏览器,支持100多种图片格式,XnViewMP还具有浏览器.幻灯片.屏幕捕捉.缩略图制作.批处理转换.十六进制浏览.拖放.通讯录.扫描输入等功能.XnVie ...
- 自开发Web应用和SAP Customer Data Cloud Identity服务的集成
今天的文章继续由SAP成都研究院的云时代女王,Aviva给大家分享关于SAP Customer Data Cloud的一些使用经验. Aviva之前的文章可以在本文末尾处获得. 下面是她的正文. 大家 ...
- 关于Java中的反射的一个简单使用
把以前在其他地方的技术文章重新整理一遍, 方便自己回忆, 也方便他人借鉴. 刚工作的时候发过这么一段代码: package cn.com.hanbinit.test; import java.lang ...
- 关于Tomcat服务器接收到的请求参数乱码的问题
我们在编写的Controller 等服务器端的代码时,接受到的请求参数经常会乱码. 解决:在Tomcat 的安装目录下找到conf 文件夹下的server.xml文件用记事本打开. 找到 <Co ...
- UVa 10003 - Cutting Sticks(区间DP)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...