插入数据到hive_Hive实现网站PV分析
之前我們做過《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 '';
準備數據
將準備好的數據導入
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 '';
插入數據
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 '';
插入數據
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中,有兩個屬性
表示是否啟用動態分區(這個是默認開啟的)
hive.exec.dynamic.partition
true
使用動態分區,需要設置成非嚴格模式
hive.exec.dynamic.partition.mode
strict
我們用命令更改,不直接配置了
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 '';
重新插入(這個地方利用動態分區的特性)
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
查看下數據
查看下數據是沒有問題的
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的插入数据到hive_Hive实现网站PV分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 寻路机器人单片机程序示例_单片机精华程序
- 下一篇: 如何把定义的数组传回主函数_java数组