目的: 实现对网站流量数据分析 (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 将数据段的间隔改成“,”
  1. 根据给的用户上网日志记录数据,计算出总流量最高的网站Top3(网站例如:v.baidu.com,weibo.com);
  2. 根据给的用户上网日志记录数据,计算出总流量最高的手机号Top3
  3. 根据给的手机号段归属地规则,计算出总流量最高的省份Top3
  4. 根据给的手机号段运营商规则,计算出总流量最高的运营商Top2
  5. 根据给的手机号段归属地规则,计算出总流量最高的城市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实现对网站流量数据分析相关推荐

  1. 网站流量数据分析技巧【转】

    转: http://blogger.org.cn/blog/more.asp?name=haonan917&id=47045 1.流量分析 一般说来,评价一个网站流量主要有两个指标:Page ...

  2. Hive(23):实例:网站流量分析

    一.概述 1.分析统计24小时内的每个时段的pv和uv (1)pv统计总的浏览量 (2)uv统计对guid去重后的总量 (3)获取时间字段,日期和小时,建立分区表 2.网站两天数据格式数据 12150 ...

  3. 网站流量日志数据分析系统(1)

    1. 点击流数据模型 1.1. 点击流概念 点击流(Click Stream)是指用户在网站上持续访问的轨迹.这个概念更注重用户浏览网站的整个流程.用户对网站的每次访问包含了一系列的点击动作行为,这些 ...

  4. Hadoop之网站流量日志数据分析

    网站流量日志数据分析系统 点击流数据模型 点击流是指用户在网站上持续访问的轨迹,按照时间来进行先后区分,基本上所有大型网站都有日志埋点.通过js的方式,可以获得用户在网站上所访问的内容,包括url.埋 ...

  5. 大数据综合项目--网站流量日志数据分析系统(详细步骤和代码)

    文章目录 前言: 基本概述 Sqoop概述 什么是Sqoop Flume概述 什么是Flume 为什么需要flume HIve概述 什么是Hive 系统背景: 模块开发 数据采集 使用Flume搭建日 ...

  6. Hadoop离线_网站流量日志数据分析系统_概述

    流量日志数据分析系统 1.点击流数据模型 2.网站流量模型分析 3.流量常见分析角度和指标分类 4.流量日志分析网站整体架构模块 1.点击流数据模型 1.1点击流概念: 点击流(Click Strea ...

  7. 网站流量日志数据分析系统(模块开发----数据仓库设计)

    1. 维度建模基本概念 维度建模(dimensional modeling)是专门用于分析型数据库.数据仓库.数据集市建模的方法.数据集市可以理解为是一种"小型数据仓库". 维度表 ...

  8. 网站流量日志数据分析系统(一)

    网站流量日志数据分析系统(一) 点击流数据模型 点击流概念 点击流模型生成 如何进行网站流量分析 网站流量分析模型举例 网站流量质量分析(流量分析) 网站流量多维度细分(流量分析) 网站内容及导航分析 ...

  9. 网站流量日志系统知识详解----【点击流事件详解】

    网站流量日志数据分析系统知识详解 1. 点击流数据模型 1.1 点击流概念 点击流(Click Stream)是指用户在网站上持续访问的轨迹.可以通过对网站日志的分析可以获得用户的点击流数据. 1.2 ...

最新文章

  1. java编程100题
  2. 2019手机浏览器排名_浏览器排行榜2019年1月浏览器市场份额排名
  3. Linux查看ip的命令详解
  4. 谈谈java面向对象之抽象,手把手带你搞定java面试之面向对象
  5. MLC——内存延迟及带宽测试工具
  6. 解析markdown_markdown-it 原理浅析
  7. 查看tomcat管理信息
  8. pytorch创建dataloader和可视化图片
  9. protel99se中文pojie版-protel99se附安装步骤
  10. Halcon标定系列(3):我个人总结的“眼在手外“和“眼在手上”的心得笔记
  11. ubuntu18.04安装微信、QQ、百度网盘
  12. php中smarty模板下载,Smarty模板下载|
  13. 百度富文本编辑器UEditor
  14. microsoft word无法插入公式
  15. android自动循环播放视频,Android编程实现VideoView循环播放功能的方法
  16. php形状特征提取方法,LowB沙箱-PHP动态特征提取
  17. 在微信公众号上下载视频音频的办法
  18. 入手佳能24-70mm f/2.8L
  19. 分布式自增ID雪花算法snowflake (Java版)
  20. 基于FPGA数字示波器的显示

热门文章

  1. 【Java篇】多线程详解
  2. jacob读写Excel
  3. 计算机会计综合实训心得体会,会计电算化实训心得总结
  4. Android MVP(四)运用反射配置泛型 Model
  5. Mac系统中强制删除废纸篓文件
  6. 测试经理的职责,管理岗位
  7. 对高等数学中的基本概念的剖析
  8. Unity IK 反动力学动画 (一)
  9. 统计各数据集上的坏占比
  10. PBR-Diffuse-Lighting-for-GGX