千家信息网

电商大数据项目(二)-推荐系统实战之实时分析以及离线分析

发表于:2024-11-22 作者:千家信息网编辑
千家信息网最后更新 2024年11月22日,电商大数据项目-推荐系统实战(一)环境搭建以及日志,人口,商品分析https://blog.51cto.com/6989066/2325073电商大数据项目-推荐系统实战之推荐算法https://bl
千家信息网最后更新 2024年11月22日电商大数据项目(二)-推荐系统实战之实时分析以及离线分析

电商大数据项目-推荐系统实战(一)环境搭建以及日志,人口,商品分析
https://blog.51cto.com/6989066/2325073
电商大数据项目-推荐系统实战之推荐算法
https://blog.51cto.com/6989066/2326209
电商大数据项目-推荐系统实战之实时分析以及离线分析
https://blog.51cto.com/6989066/2326214

五、实时分析Top IP(实时分析Top用户)
一)模块介绍
电商网站运营中,需要分析网站访问排名前N的IP,主要用来审计是否有异常IP,同时对网站运营情况进行分析。
(二)需求分析
① 如何统计IP
通过用户点击日志,即可计算

② 如何分析IP
分析不同时间段IP的访问量
分析热门IP

③ 深度思考:如何去除爬虫水军
(三)技术方案
数据采集逻辑(ETL)
用户的访问日志(点击日志)一般存储在日志服务器,需要通过Flume拉取

点击日志的缓存
由Flume采集的用户点击日志,缓存到Kafka中

实时分析Top用户信息
使用Apache Storm进行实时分析
使用Spark Streaming进行实时分析

注意:在Ambari部署的Flume和Kafka环境中,已经将Flume和Kafka进行了集成,所以可以直接将Flume采集的数据送入Kafka

(四)实验数据及说明

表user_click_log(用户点击信息表)
列名 描述 数据类型 空/非空 约束条件
user_id 用户ID varchar(18) Not null
user_ip 用户IP varchar(20) Not null
url 用户点击URL varchar(200)
click_time 用户点击时间 varchar(40)
action_type 动作名称 varchar(40)
area_id 地区ID varchar(40)
补充说明 action_type:1收藏,2加入购物车,3点击

结果表:表hopip (热门ip表)
列名 描述 数据类型 空/非空 约束条件
ip IP varchar(18) Not null
pv 访问量 varchar(200)
补充说明

(五)技术实现
① 通过Flume采集用户点击日志数据
创建Flume的配置文件:

注意:HDP集群kafka broker的默认端口是6667,而不是9092
② 使用Kafka缓存数据
新建一个名为mytopic的topic
bin/kafka-topics.sh --create --zookeeper hdp21:2181 --replication-factor 1 --partitions 1 --topic mytopic

查看新创建的Topic
bin/kafka-topics.sh --list --zookeeper hdp21:2181

测试:创建个消费者来消费mytopic里面的数据。bootstrap-server这里填主机名或者IP,而不是localhost
bin/kafka-console-consumer.sh --bootstrap-server hdp21:6667 --topic mytopic --from-beginning

删除Topic
bin/kafka-topics.sh --delete --zookeeper hdp21:2181 --topic mytopic
注意:这句命令只会将topic标识为"删除状态"。如果想,彻底删除Topic,需要将delete.topic.enable=true,并且重启Kafka
③ 实时分析Top 5用户信息:基于Storm和Spark Streaming
实现方式一:使用Apache Storm进行实时分析

注意:
pom文件中,Storm的版本为1.1.0
在此pom文件中,已经集成了Storm与Kafka、Redis、JDBC、MySQL的依赖

运行结果,如下:

实现方式二:使用Spark Streaming进行实时分析
结合Spark SQL分析Top用户(热点用户)
在上一章的Spark工程中的pom.xml文件中加入以下依赖

注意:由于Kafka版本的问题,接收Kafka的数据需要使用Receiver方式

运行结果如下:

六、实时分析黑名单用户
(一)模块介绍
电商网站运营中,需要分析网站访问排名前N的客户,主要用来审计是否有异常用户,同时分析忠诚用户。
(二)需求分析
① 如何定义异常用户?
通过用户访问频度进行分析,每小时访问40次以上,同时访问平均间隔4秒以内,则为异常用户
关联异常用户库,进行异常分析

② 如何计算用户访问内容
通过用户点击日志,即可计算

③ 深度思考:如何去除爬虫水军
(三)技术方案
数据采集逻辑(ETL)
用户的访问日志(点击日志)一般存储在日志服务器,需要通过Flume拉取

点击日志的缓存
由Flume采集的用户点击日志,缓存到Kafka中

实时分析Top用户信息
使用Apache Storm进行实时分析黑名单用户
使用Spark Streaming进行实时分析黑名单用户

注意:在Ambari部署的Flume和Kafka环境中,已经将Flume和Kafka进行了集成,所以可以直接将Flume采集的数据送入Kafka

(四)实验数据及说明

表UserInfo(用户信息表)
列名 描述 数据类型 空/非空 约束条件
UserID ×××号 varchar(18) Not null
Username 姓名 varchar(20) Not null
Sex 性别 varchar(10) Not null
Birthday 出生年月 datetime Not null
Birthprov 出生省份 varchar(8) Not null
Birthcity 出生城市 varchar(8) Not null
Job 工作 varchar(20) Not null
EducationLevel 教育水平 int Not null
SnnualSalary 年薪 double Not null
Addr_prov 现居地省份编号 varchar(8) Not null
Addr_city 现居地城市编号 varchar(8) Not null
Address 通信地址 varchar(50) Not null
Mobile 联系电话 varchar(11) Not null
Mail 邮箱 varchar(30) Not null
status 用户状态 Int
补充说明

表user_click_log(用户点击信息表)
列名 描述 数据类型 空/非空 约束条件
user_id 用户ID varchar(18) Not null
user_ip 用户IP varchar(20) Not null
url 用户点击URL varchar(200)
click_time 用户点击时间 varchar(40)
action_type 动作名称 varchar(40)
area_id 地区ID varchar(40)
补充说明 action_type:1收藏,2加入购物车,3点击

上一章的结果表:表hopip (热门ip表)
列名 描述 数据类型 空/非空 约束条件
user_ip IP varchar(18) Not null
pv 访问量 varchar(200)
补充说明

结果表:表black_list (黑名单表)
列名 描述 数据类型 空/非空 约束条件
user_id 用户ID varchar(18) Not null
user_ip 用户IP varchar(40) Not null
补充说明
(五)技术实现
1.首先,在第五章的需求里面,我们已经实现了Hot IP的分析。下面是Hop IP的结果表。
上一章的结果表:表hopip (热门ip表)
列名 描述 数据类型 空/非空 约束条件
user_ip IP varchar(18) Not null
pv 访问量 varchar(200)
补充说明
2.我们只需要根据需求的规定,关联用户信息表,即可分析出某段时间内的黑名单用户信息,例如:每10秒钟,统计过去30秒内访问频率超过10次的用户信息。这时候就需要使用到窗口函数。在Apache Storm和Spark Streaming中都可以使用窗口函数。

3.方案一:使用Storm的窗口函数,将结果写入MySQL
在MySQL中创建数据库和相应的表:
create database demo;
CREATE USER 'demo'@'%'IDENTIFIED BY 'Welcome_1';
GRANT ALL PRIVILEGES ON . TO 'demo'@'%';
FLUSH PRIVILEGES;
create table myresult(userid int primary key,PV int);
注意:
在上一章的课程中,pom文件已经集成了Storm与Kafka、Redis、JDBC、MySQL的依赖
如果使用Storm的提供JdbcInsertBolt组件,会一直将结果不停写入MySQL中。更好的做法是:创建一个自己的Bolt组件:如果MySQL不存在该userid,就执行插入;如果已经存在就执行更新操作。

当分析出每个用户的PV后,可在MySQL中执行下面的查询,查看黑名单用户信息。
select userinfo.userid,userinfo.username,myresult.PV from userinfo,myresult where userinfo.userid=myresult.userid;
4.方案二:使用Spark Streaming的窗口函数

输出结果:

七、广告点击流量统计
(一)模块介绍
电商网站运营中,广告是一个非常重要的模块,需要分析广告的点击情况,主要用来优化每个城市的点击量。

(二)需求分析
① 如何分析广告点击数据?
通过用户对广告的点击log,分析广告数据

② 计算每天各省各城市各广告的点击量

(三)技术方案
离线分析:拉取广告日志,需要通过Flume拉取到HDFS上,通过MapReduce和Spark进行离线分析。
(四)实验数据及说明

广告点击日志
列名 描述 数据类型 空/非空 约束条件
userid 用户id varchar(18) Not nul
ip 点击IP varchar(18) Not null
click_time 点击时间 varchar(20) Not null
url 广告链接 varchar(20)
area_id 地区ID varchar(20)

表Area_info(地区信息表)
列名 描述 数据类型 空/非空 约束条件
area_id 地区编号 varchar(18) Not null
area_name 地区名称 varchar(20) Not null

(五)技术实现
① 使用Flume采集用户点击日志
通常使用shell脚本执行日志采集
复杂情况,使用可视化的ETL工具,来进行Flume Agent控制
下面是配置文件,注意HDFS的端口号。

② 使用Hive进行离线广告分析
创建地区表
create external table areainfo
(areaid int,areaname string)
row format delimited fields terminated by ','
location '/input/project07';

创建广告点击日志表
create external table adloginfo
(userid int,ip string,clicktime string,url string,areaid int)
row format delimited fields terminated by ','
location '/flume/20180603';

通过SQL分析数据
select areainfo.areaname,adloginfo.url,adloginfo.clicktime,count(adloginfo.clicktime)
from adloginfo,areainfo
where adloginfo.areaid=areainfo.areaid
group by areainfo.areaname,adloginfo.url,adloginfo.clicktime;
③ 使用Spark进行离线广告日志分析

④ 使用Pig进行离线广告日志分析
加载地区表
areainfo = load '/input/areainfo.txt' using PigStorage(',') as (areaid:int,areaname:chararray);

加载广告日志表
adloginfo = load '/flume/20180603/userclicklog.txt' using PigStorage(',') as (userid:int,ip:chararray,clicktime:chararray,url:chararray,areaid:int);

按照url、地区、点击时间第广告点击日志进行分组
adloginfo1 = group adloginfo by (url,areaid,clicktime);

提取url、areaid、点击时间和总频率
adloginfo2 = foreach adloginfo1 generate group,COUNT(adloginfo.clicktime);

执行多表查询,关联地区表
result = join areainfo by areaid, adloginfo2 by group.areaid;

0