文章目录
Hive离线分析
回顾业务流程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1d3cJqbL-1641900824962)(day06_离线数据分析.assets/1628589606864.png)]
准备
搭建环境
1.启动Hadoop
start-all.sh
2.修改flume配置文件
a1.sources = r1
a1.sinks = k1
a1.channels = c1
a1.sources.r1.type = avro
a1.sources.r1.bind = 0.0.0.0
a1.sources.r1.port = 22222
a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = hdfs://hadoop01:8020/flux/reportTime=%Y-%m-%d
a1.sinks.k1.hdfs.fileType=DataStream
a1.sinks.k1.serializer = text
a1.sinks.k1.serializer.appendNewline = false
a1.sinks.k1.hdfs.useLocalTimeStamp = true
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
3.启动flume
进入flume的根目录
/bin/flume-ng agent -c conf/ -f conf/jtlog_hdfs.conf -n a1 -Dflume.root.logger=INFO,console
4.启动jt-logserver
5.测试
访问locahost/a.jsp和locahost/b.jsp
准备数据
以下方式只做参考,可以自己随意访问产生数据,注意,关闭浏览器代表一个会话终结,清除cookie或者更换浏览器模拟不同用户。
浏览器A:访问3次a.jsp,2次b.jsp关闭浏览器
浏览器B:访问3次a.jsp,2次b.jsp关闭浏览器
浏览器A:访问1次a.jps
浏览器B:访问1次b.jps
注意,flume输出的数据不是一条一个单独文件,而是根据我们的配置及自身的策略来决定何时生成一个完整的文件。离线数据处理
离线数据处理
Hive管理数据
创建flux外部表,管理HDFS中的日志信息。
hive> create database jtlogdb;
hive> use jtlogdb;
hive> create external table flux (url string,urlname string,title string,chset string,src string,col string,lg string, je string,ec string,fv string,cn string,ref string,uagent string,stat_uv string,stat_ss string,cip string) partitioned by (reportTime string) row format delimited fields terminated by '|' location '/flux';
create external table flux:创建外部表
partitioned by (reportTime string):根据日期分区
row format delimited fields terminated by ‘|’:通过 | 分割数据
location ‘/flux’:管理HDFS中/flux文件夹
url string
urlname string
title string
chset string
src string
col string
lg string
je string
ec string
fv string
cn string
ref string
uagent string
stat_uv string
stat_ss string
cip string
原始数据很多,但并不是所有的数据都跟我们的业务有关。所以。在正式处理之前我们还会对flux表做一次清洗。去除不相干的数据。
查询flux表
select * from flux;
发现并没有数据,这是为什么?—没有添加分区信息。
添加分区信息:
alter table flux add partition (reportTime='2021-12-23') location '/flux/reportTime=2021-12-23';
再次查看整表,发现数据已经被正确管理了。
数据清洗
明细宽表:将原始表按照业务需求拆分成更细粒度的表。
需要的数据字段
reportTime 产生日期
url 访问路径
urlname 页面名称
uvid 访客id
ssid 会话id
sscount 会话编号
sstime 会话时间戳
cip 访客ip
创建数据清洗表:
create table dataclear(reportTime string,url string,urlname string,uvid string,ssid string,sscount string,sstime string,cip string)