环境
需要配置:
jdk1.7.0_51
hadoop-2.6.1
向hdfs上传原始数据
hadoop fs -mkdir /myPro1
hadoop fs -mkdir /myPro1/srcdata
hadoop fs -put access.log.fensi /myPro1/srcdata
运行WeblogPreProcess进行预处理
hadoop jar myPro1.jar cn.bigdata.hive.mr.pre.WeblogPreProcess
hadoop fs -ls /myPro1/output
hadoop fs -cat /myPro1/output/part-m-00000
生成了与处理过后的文件part-m-00000
hive建表
运行ClickStreamThree进行预处理
hadoop jar myPro1-2.jar cn.bigdata.hive.mr.ClickStreamThree
思路如下:
先将数据按照时间排序
再对于每一个bean,若其相邻两条数据,若时间间隔不大,
若时间间隔过大,则
(没看懂,为什么是<和time/1000L)
我觉得应当是在一定的时间间隔内,算是一个用户的访问链。若是时间更长,则为开启了新的访问。
hive建表
create database dw_click;
use dw_click;
create table ods_click_pageviews(
Session string,
remote_addr string,
remote_user string,
time_local string,
request string,
visit_step string,
page_staylong string,
http_referer string,
http_user_agent string,
body_bytes_sent string,
status string)
partitioned by (datestr string)
row format delimited
fields terminated by '\001';
运行ClickStreamVisit进行预处理
mapper读取数据并对数据进行划分
reducer根据步数(step)进行排序
每一个访问链,对应一个visitbean单元
生成visitbean
(项目的代码有错误,找了一会儿bug,发现map读取数据的格式和需要读取的数据的格式对不上)
hadoop jar myPro1-3.jar cn.bigdata.hive.mr.ClickStreamVisit hdfs://HA3VM01:9000/myPro1/output2/part-r-00000 hdfs://HA3VM01:9000/myPro1/output3-right2/
(这里面有一个细节,ClickStreamVisit 在读取数据的时候,自动忽略掉了feild[2],也就是remote_user,我去看原始数据,发现在读取的时候,这一项,全部是“-”,不影响统计结果)
hive建表
create table click_stream_visit(
session string,