原文链接:

https://www.toutiao.com/i6773241257528394248/

之前我们做过《java mapreduce实现网站PV分析》,这次我们可以用hive分析一些需求指标

提出需求:统计分析24小时各个时段的pv和uv

分析:

(1) pv统计总的浏览量 count(url)

(2) uv统计去重 count(distinct guid)

(3) 获取时间字段,日期和小时(分区表)

最终结果预期

接下来注意每个阶段:采集阶段,清洗阶段,分析阶段。

准备数据,查看数据字典了解数据的结构和意义(此处省略了数据和数据字典的展示),可以认为此时数据已经采集完成了(采集阶段),一般由采集人员将数据交由到我们手上。

登录beeline客户端

启动服务端:bin/hiveserver2 &

启动客户端

bin/beeline -u jdbc:hive2://mastercdh:10000 -n root -p password

根据数据字典,创建数据表

创建数据库

创建数据表

create table track_log_source(

id string,

url string,

referer string,

keyword string,

type string,

guid string,

pageId string,

moduleId string,

linkId string,

attachedInfo string,

sessionId string,

trackerU string,

trackerType string,

ip string,

trackerSrc string,

cookie string,

orderCode string,

trackTime string,

endUserId string,

firstLink string,

sessionViewNo string,

productId string,

curMerchantId string,

provinceId string,

cityId string,

fee string,

edmActivity string,

edmEmail string,

edmJobId string,

ieVersion string,

platform string,

internalKeyword string,

resultSum string,

currentPage string,

linkPosition string,

buttonPosition string

)row format delimited fields terminated by '\t';

准备数据

将准备好的数据导入

load data local inpath '/data/test/data1' into table track_log_source;

load data local inpath '/data/test/data2' into table track_log_source;

再查看下

采集完成后,需要对数据进行清洗,比如之前做过的《mapreduce实现数据去重》

根据之前的分析,我们创建表,将我们需要的字段提取出来

create table track_log_qingxi(

id string,

url string,

guid string,

date string,

hour string

)row format delimited fields terminated by '\t';

插入数据

insert into table track_log_qingxi select id,url,guid,substring(trackTime,9,2) date,substring(trackTime,12,2) hour from track_log_source;

分区表:根据时间字段进行分区

create table track_log_part1(

id string,

url string,

guid string

)partitioned by(date string,hour string)

row format delimited fields terminated by '\t';

插入数据

insert into table track_log_part1 partition(date='20150828',hour='18') select id,url,guid from track_log_qingxi where date='28' and hour='18';

insert into table track_log_part1 partition(date='20150828',hour='19') select id,url,guid from track_log_qingxi where date='28' and hour='19';

这样写的话,每次都需要填写条件,非常的不方便

我们来看一个概念:动态分区

首先在hive的配置文件hive-site.xml中,有两个属性

表示是否启用动态分区(这个是默认开启的)

<property>

<name>hive.exec.dynamic.partition</name>

<value>true</value>

</property>

使用动态分区,需要设置成非严格模式

<property>

<name>hive.exec.dynamic.partition.mode</name>

<value>strict</value>

</property>

我们用命令更改,不直接配置了

set hive.exec.dynamic.partition.mode=nonstrict;

那我们重新创建分区表

create table track_log_part2(

id string,

url string,

guid string

)partitioned by(date string,hour string)

row format delimited fields terminated by '\t';

重新插入(这个地方利用动态分区的特性)

insert into table track_log_part2 partition(date,hour) select * from track_log_qingxi;

查看数据发现自动帮我们分开了,这样如果是多个时间的话也会自动完成

数据分析

PV查看

select date,hour,count(url) pv from track_log_part2 group by date,hour;

UV分析

select date,hour,count(distinct guid) uv from track_log_part2 group by date,hour;

最终结果导入最终结果表中

create table result as select date,hour,count(url) pv,count(distinct guid) uv from track_log_part2 group by date,hour;

数据导出

将最终的结果保存在mysql中

在mysql中创建表

create table track_pv_uv_save(

date varchar(30),

hour varchar(30),

pv varchar(30),

uv varchar(30),

primary key (date,hour)

);

sqoop方式(hive-mysql)

bin/sqoop export \

--connect jdbc:mysql://mastercdh:3306/track_log_mysql \

--username root \

--password password \

--table track_pv_uv_save \

--export-dir /user/hive/warehouse/exp_track_log.db/result \

-m 1 \

--input-fields-terminated-by '\001'

在mysql中查看

我们可以将数据下载到本地

bin/hdfs dfs -get /user/hive/warehouse/exp_track_log.db/result/000000_0 /data/test

查看下数据

查看下数据是没有问题的

Hive实现网站PV分析的更多相关文章

  1. java mapreduce实现网站PV分析

    原文链接: https://www.toutiao.com/i6765677128022229517/ PV 是Page Views的缩写,即页面浏览量,用户每一次对网站中的每个网页访问均被记录一次. ...

  2. Hadoop学习笔记—20.网站日志分析项目案例(一)项目介绍

    网站日志分析项目案例(一)项目介绍:当前页面 网站日志分析项目案例(二)数据清洗:http://www.cnblogs.com/edisonchou/p/4458219.html 网站日志分析项目案例 ...

  3. Hadoop学习笔记—20.网站日志分析项目案例(三)统计分析

    网站日志分析项目案例(一)项目介绍:http://www.cnblogs.com/edisonchou/p/4449082.html 网站日志分析项目案例(二)数据清洗:http://www.cnbl ...

  4. 借网站日记分析~普及一下Pandas基础

      对网站日记分析其实比较常见,今天模拟演示一下一些应用场景,也顺便说说Pandas,图示部分也简单分析了下 1.数据清洗¶ 一般数据都不可能直接拿来用的,或多或少都得清理一下,我这边就模拟一下清洗完 ...

  5. 网站PV、UV以及查看方法

    网站PV.UV以及查看方法 一.名词解释 PV:PV 是Page Views的缩写,即页面浏览量,用户每一次对网站中的每个网页访问均被记录一次.注意,访客每刷新一次页面,pv就增加一次. UV:UV是 ...

  6. Hive(六)hive执行过程实例分析与hive优化策略

    一.Hive 执行过程实例分析 1.join 对于 join 操作:SELECT pv.pageid, u.age FROM page_view pv JOIN user u ON (pv.useri ...

  7. Hadoop学习笔记—20.网站日志分析项目案例(二)数据清洗

    网站日志分析项目案例(一)项目介绍:http://www.cnblogs.com/edisonchou/p/4449082.html 网站日志分析项目案例(二)数据清洗:当前页面 网站日志分析项目案例 ...

  8. Flickr 网站架构分析

    Flickr 网站架构分析 Flickr.com 是网上最受欢迎的照片共享网站之一,还记得那位给Windows Vista拍摄壁纸的Hamad Darwish吗?他就是将照片上传到Flickr,后而被 ...

  9. PHP文件操作,多行句子的读取,file()函数,file_get_contents()函数,file_put_contents()函数,is_file,统计网站pv (访问量),文件的复制 copy,文件重命名 rename,删除文件 unlink

    php中添加utf-8: header("Content-type:text/html;charset='UTF-8'"); 文件操作步骤: 1.在同一目录下建立一个file.tx ...

随机推荐

  1. EntityFramework Core (一)记一次 .net core 使用 ef 6

    使用传统的sql去操作数据库虽然思路更加清晰,对每一步数据库读写操作都能监控到,但是对大数据存储,或存储规则复杂的程序就需要编写大量的SQL语句且不易维护..orm大大方便了复杂的数据库读写操作, 让 ...

  2. HashMap的putAll方法介绍说明

    jdk1.8 使用putAll时,新map中的值仅为旧map值所对应对象的引用,并不会产生新对象. 如下,使用for循环赋值! public void putAll(Map<? extends ...

  3. SQLserver 2014 如何使用Datename()函数获取对应时间

    一.在本文中,GetDate()获得的日期由两部分组成,分别是今天的日期和当时的时间: Select GetDate() 二.用DateName()就可以获得相应的年.月.日,然后再把它们连接起来就可 ...

  4. TSN(Time-Sensitive Networking)协议导读

    前言 上一个主题我们介绍了TSN的发展历史和协议族现状,它为建立统一的确定性网络传输基础设施提供了有力保障. TSN是一套协议标准,以保证确定性信息在标准以太网的不同场景下的顺利传输.TSN协议族本身 ...

  5. android studio出现 Could not initialize class com.android.sdklib.repository.AndroidSdkHandler

    新的android studio  (4.2)已经不支持旧有的 com.android.tools.build:gradle:2.3.3 了,有些方法和类会找不到. 去build.gradle中把这个 ...

  6. Java网络多线程开发:java.io.EOFException

    Java网络多线程开发:java.io.EOFException 在实现韩顺平Java的多用户即使通信系统实战项目中: 对于客户端线程的停止,老韩是向服务器端发送一个消息对象,提示服务器端进行资源释放 ...

  7. java 多线程: Thread 锁ReentrantLock 常用方法

    注意 reentrantLock 和 同步代码块儿一样,同一个时刻只能一个线程获取锁,也就是共用锁的代码块部分,线程是顺序执行的 ReentrantLock 常用方法 getHoldCount获取当前 ...

  8. C# Dispose模式

    需要明确一下C#程序(或者说.NET)中的资源.简单的说来,C#中的每一个类型都代表一种资源,而资源又分为两类: 托管资源:由CLR管理分配和释放的资源,即由CLR里new出来的对象: 非托管资源:不 ...

  9. [源码解析] PyTorch 分布式之弹性训练(2)---启动&单节点流程

    [源码解析] PyTorch 分布式之弹性训练(2)---启动&单节点流程 目录 [源码解析] PyTorch 分布式之弹性训练(2)---启动&单节点流程 0x00 摘要 0x01 ...

  10. 【LeetCode】981. Time Based Key-Value Store 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 字典 日期 题目地址:https://leetcod ...