![](https://img.haomeiwen.com/i13947662/686f7970f6ca58a4.png)
用户行为日志
用户访问网站时所有的行为数据(访问、浏览、搜索、点击等等)也叫做行为轨迹或流量日志。
为什么要记录用户访问行为日志?
网站页面的访问量
网站粘性
推荐
用户行为日志生成渠道?
Nginx(直接去nginx的日志中获取)
Ajax(在页面预设js代码)
![](https://img.haomeiwen.com/i13947662/97e1c7d935aae598.png)
日志数据分类:
1)访问系统的数据行:操作系统、浏览器等等
2)访问特征:点击的url、从哪个url跳转过来的(reference)、页面上的停留时间
3)访问信息:session_id、访问的ip信息(能获取ip所属地市或运营商)
用户行为日志分析的意义
网站的眼睛:
我们可以通过日志分析得知,我们的网站的访问者来自哪里?我们的访问者在找什么东西?哪些页面最受欢迎?访问者从哪个地方跳转过来的?比如从百度,360推广。
网站的神经:
网站的布局是否合理对于用户的使用和推广效果时非常非常重要的。网站的排版和内容摆放不是随便放的。
网站的大脑:
根据网站用户访问日志,来指导我们的决策,最受欢迎的课程、比如在哪些地区做重点推广,对我们的课程做哪些优化摆放,什么时候做网站搜索引擎的推广,设置推广预算,什么时候开展活动?
数据处理流程
![](https://img.haomeiwen.com/i13947662/1e998c06c6b114c4.png)
1)数据采集
一般我们用Flume,它是专门用来把数据从一个地方(nginx产生日志的地方)搬运到另一个地方(HDFS)的数据处理框架
2)数据清晰
脏数据(就是不适用的数据),清洗工具可以是(spark sql、hive、mapreduce),清洗完之后的数据可以存放在HDFS(Hive/Spark SQL)
3)数据处理
按照我们的需要进行相关的业务的统计和分析,工具有spark sql、hive、mapreduce等其他一些分布式计算框架
4)数据的处理结果入库
结果可以存放到Mysql、等关系型数据库、NoSql(Hbase、redis、es等)或者是HDFS上。
5)数据的可视化展示
通过图形化方式展示出来:饼图、柱状图、地图、折线图(典型的技术选型Echarts(百度开源)、HUE、Zeppelin)
![](https://img.haomeiwen.com/i13947662/456b077a2897b457.png)
![](https://img.haomeiwen.com/i13947662/e50d461a3bb8903a.png)
![](https://img.haomeiwen.com/i13947662/97cdfa8b21c1bbc6.png)
![](https://img.haomeiwen.com/i13947662/8fdc45fee3132acc.png)
数据清洗
数据清洗可以一次完成,也可以多次完成。
1)使用Spark Sql解析访问日志
2)解析出课程编号和类型
3)根据ip解析出城市信息
4)使用Spark Sql将访问时间按天进行分区输出
访问日志的处理原则
一般我们对访问日志的分析,是需要进行分区的,按照日志的访问时间进行相应的分区。比如按天、小时、分钟等
![](https://img.haomeiwen.com/i13947662/40267190449b5560.png)
如何分区和设置每个分区生成的part文件呐?
![](https://img.haomeiwen.com/i13947662/a6868605292078e0.png)
/usr/hadoop/testdata/wish文件夹下这时会生成以”day=value“为目录名字,cd进去目录里存放的是part-0000*.snappy.parquet的文件
![](https://img.haomeiwen.com/i13947662/4dce0d2ddd830748.png)
按需求完成统计信息,并将统计结果入库(关系型数据库)
入库方式有两种
第一种:使用DataFrame API完成统计分析
第二种:使用SQL API完成统计分析
我们先把统计好的parquet格式的文件数据加载进来
![](https://img.haomeiwen.com/i13947662/bb6c1c2f3687ab03.png)
这里的day我们存入的是string格式的,为什么读取出来的是integer尼?
答:这是spark sql的推到服务做的事情,其实在官网上有说明,默认情况下自动推算的解析服务是开启的。
![](https://img.haomeiwen.com/i13947662/4c0f9e5bce8090da.png)
这里如果我们不想让他自动推算,就要设置spark.sql.source.partitionColumnTypeInference.enabled为false即可。
![](https://img.haomeiwen.com/i13947662/8f2e4a397ad7b606.png)
网友评论