本项目是基于Spark MLLib的大数据电子商务公司推荐系统项目,使用scala语言和java语言。 基于python语言的推荐系统项目将创建另一个博客。 阅读这个博客之前,需要以下基础。
1.linux基本命令
2 .至少有高中以上数学基础。
3 .至少有java se基础,能说scala语言和Java EE比较好(虽然Jave EE不是必须的,但是有助于更快地理解项目的体系结构)。
我有github账户,至少知道git clone、fork、branch的概念。
5 .有网络基础,至少知道服务器端和客户端的区别。
6 .希望有大数据的基础,能够Hadoop、HDFS、MapReduce、Sqoop、HBase、Hive、Spark、Storm。
有mysql数据库基础,至少可以进行最基本的增删修改。
如果你是大神的话,我觉得看这个博客也没什么用。 至少请给我意见和建议。
PC配置要求
1.CPU :可以是主流CPU
2 .存储器RAM:至少8G,建议16G以上,32G不浪费。
3 .硬盘: VM对I/O流的读取速度要求很高,所以256G以上的固态硬盘(SATA3即可。 NVME更好) ),需要60-100G的系统磁盘,其馀为安装虚拟机专门创建一个磁盘。 或者,采用夸耀存储器机械硬盘的方案。
关于引以为豪的内存介绍和实现方法
3359 product.pconline.com.cn/itbk/DIY/memory/1806/11365945.html
4 .无GPU显卡请求。 但是如果你想学习深度学习框架,可以考虑1060 6g,甚至2080TI。
5 .网速: centos多为8GB,HDP接近7个g,CDH几个数据包加起来为2.5G。 自己计算需要多长时间? 还是考虑用u盘从别人那里复制?
也可以考虑使用AlibabaCloud (阿里巴巴云)、云等云主机。
步骤1 :
构建CentOS HDP环境或构建CentOS CDH环境。 这些都是开源的,不用担心版权问题,企业也一般使用这两种方案。
这里采用了CentOS HDP的方案
为了构建的HDP环境,以三个节点为例。 (上——部署主节点和服务) ) ) )。
3359 blog.51cto.com/6989066/2173573
要构建大数据的HDP环境,请以三个节点为例。 (下——扩展节点、删除节点和其他服务的部署) )。
3359 blog.51cto.com/6989066/2175476
也可以采用CentOS CDH的方案
构建CDH实验环境,以三个节点为例进行安装配置
3359 blog.51cto.com/6989066/2296064
开发工具: Eclipse oxygen版本或IDEA
代码安装部分
1 .数据:用户查询日志源
Sogou实验室
. https://www.sogou.com/labs/resource/q.PHP
我选的迷你版
介绍:
搜索引擎搜索日志库设计包含网页搜索日志数据的集合,包括约一个月(2008年6月) Sogou搜索引擎的部分网页搜索需求和用户点击情况。 为进行中文搜索引擎用户行为分析的研究者提供基准研究资料
格式说明:
数据格式为
访问时间t用户IDt[查询字]t返回此URL的结果中的排名t用户单击的序列号t用户单击的URL
其中,用户ID是根据用户使用浏览器访问搜索引擎时的cookie信息自动分配的。 这意味着使用同一浏览器输入的不同查询对应于同一用户ID
使用Spark进行分析和处理
首先使用Ambari添加Spark2的服务; 因为依赖于其他服务,例如Hive等,所以启动Ambari Server时必须指定MySQL的JDBC驱动程序。
要登录spark-shell,需要执行以下操作:
spark-shell --master yarn-client
ambari-server setup---JDBC-db=MySQL---JDBC-driver=/usr/share/Java/MySQL-connector-Java.jar
JDBC -驱动程序地址对应于您安装的mysql-connector-java.jar目录。
(二)案例2 .人口分析案例
该案例假设需要统计某省人口[1亿]的性别和身高,需要计算男女人数、男性最高和最低身高、女性最高和最低身高。 本案例中使用的源文件为以下形式,3列分别为ID、性别、身高(cm )。
使用Scala程序生成测试数据(约1.3G ) )。
3359 github.com/as dud/big data _ project/blob/master/mysparkp
roject/src/main/java/day0629/PeopleInfo/PeopleInfoFileGenerator.scala注意:可以将数据量减小一下,这样处理的时候会短一些。示例中是1亿条记录,可以改为1万条记录。
并将生成的数据放到HDFS上:
hdfs dfs -put sample_people_info.txt /myproject/data
(三)案例3:电商订单销售数据分析
(四)Spark的累加器和广播变量
由于spark是分布式的计算,所以使得每个task间不存在共享的变量,而为了实现共享变量spark实现了两种类型 - 累加器与广播变量。
1.累加器(accumulator)是Spark中提供的一种分布式的变量机制,其原理类似于mapreduce,即分布式的改变,然后聚合这些改变。累加器的一个常见用途是在调试时对作业执行过程中的事件进行计数。
示例:
val accum = sc.accumulator(10, "My Accumulator")
sc.parallelize(Array(1,2,3,4)).foreach(x => accum+=x)
println(accum.value)
最终结果:20
2.广播变量允许程序员将一个只读的变量缓存在每台机器上,而不用在任务之间传递变量。广播变量可被用于有效地给每个节点一个大输入数据集的副本。Spark还尝试使用高效地广播算法来分发变量,进而减少通信的开销。
示例:将用户信息存入广播变量。
case class UserInfo(userID:Int,userName:String,userAge:Int)
val broadcastVar = sc.broadcast(UserInfo(100,"Tom",23))
broadcastVar.value
四、各区域热门商品
(一)模块介绍
电商网站运营中,需要对每个区域用户关心的商品进行统计分析,支持用户决策。
用途:
分析各区域对产品的不同需求,进行差异化研究,例如北京用户喜欢手机,上海用户喜欢汽车。
指导商品折扣,推广策略
(二)需求分析
(1)如何定义用户关心的商品?
通过用户对商品的点击量来衡量商品热度
复杂模型:通过用户点击+购买以及搜藏等综合数据对商品进行评价
商品热门程度得分模型 = 点击次数2+购买次数5+搜藏次数*3
其中2,5,3为得分权重
(2)如何获取区域
通过用户点击日志,订单可以获取地域
① 日志数据,来源与日志系统,flume ,t+1也可以每30分钟
② 订单来源于数据库,sqoop,t+1也可以每30分钟
数据库一定是读写分离
sqoop从读的数据库导数据,所以会造成数据与真实业务库有一定的延时
(3)深度思考:如何去除爬虫水军
(三)技术方案
数据采集逻辑(ETL)
电商日志一般存储在日志服务器,需要通过Flume拉取到HDFS上
数据的清洗逻辑
使用MapReduce进行数据清洗
使用Spark进行清洗
各区域热门商品的分析计算
使用Hive进行数据的分析和处理
使用Spark SQL进行数据的分析和处理
思考:能否采用MapReduce进行数据的分析和处理
(四)实验数据及说明
表Product(产品信息表)
列名 描述 数据类型 空/非空 约束条件
product_id 商品号 varchar(18) Not null
product_name 商品名称 varchar(20) Not null
marque 商品型号 varchar(10) Not null
barcode 仓库条码 varchar Not null
price 商品价格 double Not null
brand_id 商品品牌 varchar(8) Not null
market_price 市场价格 double Not null
stock 库存 int Not null
status 状态 int Not null
补充说明 Status:下架-1,上架0,预售(1)
表Area_info(地区信息表)
列名 描述 数据类型 空/非空 约束条件
area_id 地区编号 varchar(18) Not null
area_name 地区名称 varchar(20) Not null
补充说明
表order_info(订单信息表)
列名 描述 数据类型 空/非空 约束条件
order_id 订单ID varchar(18) Not null
order_date 订单日期 varchar(20) Not null
user_id 用户ID varchar(20)
product_id 商品ID varchar(20)
补充说明
表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点击
表area_hot_product(区域热门商品表):最终结果表
列名 描述 数据类型 空/非空 约束条件
area_id 地区ID varchar(18) Not null
area_name 地区名称 varchar(20) Not null
product_id 商品ID varchar(200)
product_name 商品名称 varchar(40)
pv 访问量 BIGINT
补充说明
(五)技术实现
① 使用Flume采集用户点击日志
通常使用shell脚本执行日志采集
复杂情况,使用可视化的ETL工具,来进行Flume Agent控制
下面是配置文件,注意HDFS的端口号。
② 数据的清洗
需要将用户点击日志里面对于商品的点击识别出来
过滤不满足6个字段的数据
过滤URL为空的数据,即:过滤出包含http开头的日志记录
实现方式一:使用MapReduce程序进行数据的清洗
实现方式二:使用Spark程序进行数据的清洗
注意:如果不希望在Spark执行中,打印过多的日志,可以使用下面的语句:
Logger.getLogger("org.apache.spark").setLevel(Level.ERROR)
Logger.getLogger("org.eclipse.jetty.server").setLevel(Level.OFF)
③ 各区域热门商品热度统计:基于Hive和Spark SQL
方式一:使用Hive进行统计
方式二:使用Spark SQL进行统计
在Spark SQL中执行的SQL:
select a.area_id,a.area_name,p.product_id,product_name,count(c.product_id) from area a,product p,clicklog c where a.area_id=c.area_id and p.product_id=c.product_id group by a.area_id,a.area_name,p.product_id,p.product_name;