Hive+MapReduce实现对网站流量数据分析
目的: 实现对网站流量数据分析 (MapReduce+Hive综合实验)
文件说明:
http.log 日志文件,是电信运营商记录用户手机上网访问某些网站行为的日志记录数据,其中上行流量+下行流量 = 总流量;
phone.txt 是手机号段规则,是手机号码对应地区城市和运营商的数据。
数据部分内容:
http.log 部分数据
.
phone.txt 部分数据 .
数据格式说明:
- http.log日志 数据格式:
手机号码,请求网站的URL,上行流量(20字节),下行流量(5000字节)
例如:18611132889 http://v.baidu.com/tv 20 5000 - phone.txt 数据格式:
手机号前缀,手机号段,手机号码对应的省份,城市,运营商,邮编,区号,行政划分代码
例如:133 1332170 广西 南宁 电信 530000 0771 450100
(一条数据中多个字段用空格或制表符分隔)
要求:
- 用 MapReduce 将数据段的间隔改成“,”
- 根据给的用户上网日志记录数据,计算出总流量最高的网站Top3(网站例如:v.baidu.com,weibo.com);
- 根据给的用户上网日志记录数据,计算出总流量最高的手机号Top3;
- 根据给的手机号段归属地规则,计算出总流量最高的省份Top3;
- 根据给的手机号段运营商规则,计算出总流量最高的运营商Top2;
- 根据给的手机号段归属地规则,计算出总流量最高的城市Top3;
首先对数据用 MapReduce 进行简单的处理,流程如下:
http.log 数据处理流程
phone.txt 数据处理流程
处理完数据,得到我们想要的数据,如下:
http.log 处理后的数据
.
phone.txt 处理后的数据
以下是 MapReduce 主要代码。
http_Mapper 代码:
public class http_Mapper extends Mapper<LongWritable, Text, Text, NullWritable> {@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {//用正则表达式将文件每一行的制表符和空格换成逗号String new_value = value.toString().replaceAll("\s+", ",");//将修改后的每一行数据切割成数组String[] new_value_split = new_value.split(",");//将每一行数据的网站保留有效域名String domain_name = new_value_split[1].replaceAll("[a-zA-Z]+://|(/.*)", "");//将每一行数据的上下行流量求和int all_flow = Integer.parseInt(new_value_split[2]) + Integer.parseInt(new_value_split[3]);//将手机号、域名网址、总流量作为处理后的有效数据,例如:15639120688 v.baidu.com 15994String k2 = new_value_split[0] + "," + domain_name + "," + all_flow;//写入上下文对象context.write(new Text(k2), NullWritable.get());}
}
http_Reducer 代码:
public class http_Reducer extends Reducer<Text, NullWritable, Text, NullWritable> {@Overrideprotected void reduce(Text key, Iterable<NullWritable> values, Context context) throws IOException, InterruptedException {//将shuffle过来的(k3,v3)直接当(k4,v4)就好了context.write(key, NullWritable.get());}
}
phone_Mapper 代码:
public class phone_Mapper extends Mapper<LongWritable, Text, Text, NullWritable> {@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {//将文件每一行的制表符换成逗号String new_value = value.toString().replace("\t", ",");//将修改后的每一行数据切割成数组String[] new_value_split = new_value.split(",");//将手机号段、省份、城市、运营商作为最后的有效数据,例如:1300000 山东 济南 联通String mes = new_value_split[1] + "," + new_value_split[2] + "," + new_value_split[3] + "," + new_value_split[4];//写入上下文对象context.write(new Text(mes), NullWritable.get());}
}
phone_Reducer 代码:
public class phone_Reducer extends Reducer<Text, NullWritable, Text, NullWritable> {@Overrideprotected void reduce(Text key, Iterable<NullWritable> values, Context context) throws IOException, InterruptedException {//将shuffle过来的(k3,v3)直接当(k4,v4)就好了context.write(key, NullWritable.get());}
}
接下来,创建 Hive 表,
输入命令:
create table if not exists lhr_http
(h_no bigint ,h_url string ,h_allstream int)
row format delimited fields terminated by ',';create table if not exists lhr_phone
(p_no bigint ,p_prov string ,p_city string ,p_oper string)
row format delimited fields terminated by ',';
运行结果:
将清洗后的数据导入Hive
输入命令:
load data inpath '/http_out/part-r-00000' into table lhr_http;
load data inpath '/phone_out/part-r-00000' into table lhr_phone;
运行结果:
导入的的数据:
现在我们已经将处理好的数据导入到创建的两张 Hive 表了,接下来就可以写 Hql 语句来完成前面提到的 5 个要求了。
1.根据给的用户上网日志记录数据,计算出总流量最高的网站Top3(网站例如:v.baidu.com, weibo.com)
输入命令:
select h_url,sum(h_allstream) as sum
from lhr_http
group by h_url
order by sum desc
limit 3;
输出结果:
2. 根据给的用户上网日志记录数据,计算出总流量最高的手机号Top3
输入命令:
select h_no,sum(h_allstream) as sum
from lhr_http
group by h_no
order by sum desc
limit 3;
输出结果:
3. 根据给的手机号段归属地规则,计算出总流量最高的省份Top3
输入命令:
select p_prov,sum(h_allstream) as sum
from lhr_http, lhr_phone
where substr(h_no,0,7)=p_no
group by p_prov
order by sum desc limit 3;
输出结果:
4. 根据给的手机号段运营商规则,计算出总流量最高的运营商Top2
输入命令:
select p_oper,sum(h_allstream) as sum
from lhr_http,lhr_phone
where substr(h_no,0,7)=p_no
group by p_oper
order by sum desc
limit 2;
输出结果:
5. 根据给的手机号段归属地规则,计算出总流量最高的城市Top3
输入命令:
select p_city,sum(h_allstream) as sum
from lhr_http,lhr_phone
where substr(h_no,0,7)=p_no
group by p_city
order by sum desc
limit 3;
输出结果:
over!!!
Hive+MapReduce实现对网站流量数据分析相关推荐
- 网站流量数据分析技巧【转】
转: http://blogger.org.cn/blog/more.asp?name=haonan917&id=47045 1.流量分析 一般说来,评价一个网站流量主要有两个指标:Page ...
- Hive(23):实例:网站流量分析
一.概述 1.分析统计24小时内的每个时段的pv和uv (1)pv统计总的浏览量 (2)uv统计对guid去重后的总量 (3)获取时间字段,日期和小时,建立分区表 2.网站两天数据格式数据 12150 ...
- 网站流量日志数据分析系统(1)
1. 点击流数据模型 1.1. 点击流概念 点击流(Click Stream)是指用户在网站上持续访问的轨迹.这个概念更注重用户浏览网站的整个流程.用户对网站的每次访问包含了一系列的点击动作行为,这些 ...
- Hadoop之网站流量日志数据分析
网站流量日志数据分析系统 点击流数据模型 点击流是指用户在网站上持续访问的轨迹,按照时间来进行先后区分,基本上所有大型网站都有日志埋点.通过js的方式,可以获得用户在网站上所访问的内容,包括url.埋 ...
- 大数据综合项目--网站流量日志数据分析系统(详细步骤和代码)
文章目录 前言: 基本概述 Sqoop概述 什么是Sqoop Flume概述 什么是Flume 为什么需要flume HIve概述 什么是Hive 系统背景: 模块开发 数据采集 使用Flume搭建日 ...
- Hadoop离线_网站流量日志数据分析系统_概述
流量日志数据分析系统 1.点击流数据模型 2.网站流量模型分析 3.流量常见分析角度和指标分类 4.流量日志分析网站整体架构模块 1.点击流数据模型 1.1点击流概念: 点击流(Click Strea ...
- 网站流量日志数据分析系统(模块开发----数据仓库设计)
1. 维度建模基本概念 维度建模(dimensional modeling)是专门用于分析型数据库.数据仓库.数据集市建模的方法.数据集市可以理解为是一种"小型数据仓库". 维度表 ...
- 网站流量日志数据分析系统(一)
网站流量日志数据分析系统(一) 点击流数据模型 点击流概念 点击流模型生成 如何进行网站流量分析 网站流量分析模型举例 网站流量质量分析(流量分析) 网站流量多维度细分(流量分析) 网站内容及导航分析 ...
- 网站流量日志系统知识详解----【点击流事件详解】
网站流量日志数据分析系统知识详解 1. 点击流数据模型 1.1 点击流概念 点击流(Click Stream)是指用户在网站上持续访问的轨迹.可以通过对网站日志的分析可以获得用户的点击流数据. 1.2 ...
最新文章
- java编程100题
- 2019手机浏览器排名_浏览器排行榜2019年1月浏览器市场份额排名
- Linux查看ip的命令详解
- 谈谈java面向对象之抽象,手把手带你搞定java面试之面向对象
- MLC——内存延迟及带宽测试工具
- 解析markdown_markdown-it 原理浅析
- 查看tomcat管理信息
- pytorch创建dataloader和可视化图片
- protel99se中文pojie版-protel99se附安装步骤
- Halcon标定系列(3):我个人总结的“眼在手外“和“眼在手上”的心得笔记
- ubuntu18.04安装微信、QQ、百度网盘
- php中smarty模板下载,Smarty模板下载|
- 百度富文本编辑器UEditor
- microsoft word无法插入公式
- android自动循环播放视频,Android编程实现VideoView循环播放功能的方法
- php形状特征提取方法,LowB沙箱-PHP动态特征提取
- 在微信公众号上下载视频音频的办法
- 入手佳能24-70mm f/2.8L
- 分布式自增ID雪花算法snowflake (Java版)
- 基于FPGA数字示波器的显示