初试网站流量结果分析 -----之脚本执行日志数据的动态分区,

1、手动加载数据,并对pv,uv进行分析:

数据来演就不提供了,这里记下简单的过程

【案例】网站流量分析
五、【案例】日志数据文件分析
-》需求:统计24小时内的每个时段的pv和uv
   -》pv统计总的浏览量
   -》uv统计对guid去重后的总量
   -》获取时间字段,日期和小时   --》分区表


登录hive:
(beeline显示较为美观,所以我们选择使用beeline)

启动服务端:bin/hiveserver2 &

启动metas服务:bin/hive --service metastore

启动客户端:bin/beeline -u jdbc:hive2://bigdata-03:10000 -n beifeng -p 123456

1、创建源表,把所有的数据加载到数据表上

2、数据清洗,对自己所需要的字段做提取,以及格式转换,字段截取等工作,得到清洗数据表

3、创建分区表,按需要设置分区字段,并从数据清洗表中加载数据

4、对分区表进行分析,将分析结果保存到结果表

5将结果表用sqoop工具导出到mysql,对外提供查询。



-》创建源表
create database track_log;


create table yhd_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 '/opt/datas/2015082819' into table yhd_source;
load data local inpath '/opt/datas/2015082818' into table yhd_source;


2、【数据清洗】


创建一个清洗表:
create table yhd_qingxi(
id string,
url string,
guid string,
date_now string,
hour string
)
row format delimited fields terminated by "\t"; 


insert into table yhd_qingxi
select id,url,guid,regexp_replace(substr(tracktime,0,10),'-','') as date_now,substr(tracktime,12,2) as hour from yhd_source;


创建分区表:根据时间字段分区
create table yhd_part(
id string,
url string,
guid string
)partitioned by (date_now string ,hour string)

row format delimited fields terminated by "\t"; 

对数据进行静态,与动态两种方式的分区加载,最后的结果如下

PV:
select date_now,hour,count(url) as pv from yhd_part2 group by date,hour;
结果:
+-----------+-------+--------+--+
|   date    | hour  |   pv   |
+-----------+-------+--------+--+
| 20150828  | 18    | 64972  |
| 20150828  | 19    | 61162  |
+-----------+-------+--------+--+


UV:
select date_now,hour,count(distinct guid) uv from yhd_part2 group by date_now,hour;
结果:
+-----------+-------+--------+--+
|   date    | hour  |   uv   |
+-----------+-------+--------+--+
| 20150828  | 18    | 23938  |
| 20150828  | 19    | 22330  |

+-----------+-------+--------+--+

可以将每天的结果保存到  另外一个结果表,作展示用

create table result_log as

select date_now,hour,count(url) pv,count(distinct guid) uv from yhd_part group by date_now,hour;

对每天的结果进行更新,对外可提供查询,



最后将hive中的结果表导出到MySQL中

在MySQL中创建数据库,创建对应的表

create table log_day_save(
date_now varchar(30),
hour varchar(30),
pv varchar(30),
uv varchar(30),
primary key(date_now,hour)

);


对结果进行导出,从hive到mysql.

bin/sqoop export \
--connect jdbc:mysql://make.hadoop.com:3306/log_result \
--username root \
--password 123456 \
--table log_day_save \
--export-dir /user/hive/warehouse/log_part.db/result_log \
-m 1 \

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

对结果进行查询,哈哈,这下就可以用jdbc做框架对其进行查询了



2、脚本对log文件夹进行数据加载的简单实现

首先我们的日志文件按照此格式进行存放,每一天一个文件夹,里面为每个小时的日志问价,如下


首先我们应该是,每天凌晨加载昨天的数据,所以这里的脚本应该为

#! /bin/bash	
#定义昨天的时间
YESTERDAY=`date -d '-1 days' +%Y%m%d`


#定义日志文件夹
access_log_dir=/opt/module/apache/hive-1.2.1/access_log/$YESTERDAY

#定义hive的目录

HIVE_HOME=/opt/module/apache/hive-1.2.1


#循环列出文件下的日志文件

for file in `ls $access_log_dir`

do 
	date_now=${file:0:8}
	hour=${file:8:2}
	$HIVE_HOME/bin/hive -e "load data local inpath '$access_log_dir/$file' into table load_log.load_log_day partition (date_now=$date_now,hour=$hour)"
done
	$HIVE_HOME/bin/hive -e "show partitions load_log.load_log_day"

创建后,修改权限让其可以运行,sh -x xxx.sh 可以看到其详细运行过程,或者过程中的报错信息,运行之前要建好自己的库以及自己存放源数据的表


从图上我们可以看到,这个过程是按照我们的步骤在实现,计算昨天的时间,按目录加载数据等等,租后看看我们的结果,我们不是在脚本的最后展示了分区的信息吗?如下


也可以直观的看到,我们的存放数据的目录已经对应好了,到这里,大功告成


以后自己常来看看,


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值