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

电商大数据项目-推荐系统实战(一)环境搭建以及日志,人口,商品分析
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;

转载于:https://blog.51cto.com/6989066/2326214

项目一Spark离线处理本项目来源于企业级电商网站的大数据统计分析平台,该平台以 Spark 框架为核心,对电商网站的日志进行离线实时分析。 该大数据分析平台对电商网站的各种用户行为(访问行为、购物行为、广告点击行为等)进行分析,根据平台统计出来的数据,辅助公司中的 PM(产品经理)、数据分析师以及管理人员分析现有产品的情况,并根据用户行为分析结果持续改进产品的设计,以及调整公司的战略和业务。最终达到用大数据技术来帮助提升公司的业绩、营业额以及市场占有率的目标。 本项目使用了 Spark 技术生态栈中最常用的三个技术框架,Spark Core、Spark SQL 和 Spark Streaming,进行离线计算和实时计算业务模块的开发。实现了包括用户访问 session 分析、页面单跳转化率统计、热门商品离线统计、广告流量实时统计 4 个业务模块。通过合理的将实际业务模块进行技术整合与改造,该项目几乎完全涵盖了 Spark Core、Spark SQL 和 Spark Streaming 这三个技术框架中大部分的功能点、知识点,学员对于 Spark 技术框架的理解将会在本项目中得到很大的提高。 项目Spark实时处理项目简介对于实时性要求高的应用,如用户即时详单查询,业务量监控等,需要应用实时处理架构项目场景对于实时要求高的应用、有对数据进行实时展示和查询需求时项目技术分别使用canal和kafka搭建各自针对业务数据库和用户行为数据的实时数据采集系统,使用SparkStreaming搭建高吞吐的数据实时处理模块,选用ES作为最终的实时数据处理结果的存储位置,并从中获取数据进行展示,进一步降低响应时间。 
如今大数据已经成了各大互联网公司工作的重点方向,而推荐系统可以说就是大数据最好的落地应用之一,已经为企业带来了可观的用户流量和销售额。特别是对于电商,好的推荐系统可以大大提升电商企业的销售业绩。国内外的知名电商,如亚马逊、淘宝、京东等公司,都在推荐系统领域投入了大量研发力量,也在大量招收相关的专业人才。打造的电商推荐系统项目,就是以经过修改的中文亚马逊电商数据集作为依托,并以某电商网站真实的业务架构作为基础来实现的,其中包含了离线推荐与实时推荐体系,综合利用了协同过滤算法以及基于内容的推荐方法来提供混合推荐。具体实现的模块主要有:基于统计的离线推荐、基于隐语义模型的离线推荐、基于自定义模型的实时推荐,以及基于内容的、和基于Item-CF的离线相似推荐。整个项目具有很强的实操性和综合性,对已有的大数据和机器学习相关知识是一个系统性的梳理和整合,通过学习,同学们可以深入了解推荐系统电商企业中的实际应用,可以为有志于增加大数据项目经验的开发人员、特别是对电商业务领域感兴趣的求职人员,提供更好的学习平台。适合人群:1.有一定的 Java、Scala 基础,希望了解大数据应用方向的编程人员2.有 Java、Scala 开发经验,了解大数据相关知识,希望增加项目经验的开发人员3.有电商领域开发经验,希望拓展电商业务场景、丰富经验的开发人员4.有较好的数学基础,希望学br习机器学习和推荐系统相关算法的求职人员
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值