推荐系统总结
2021-09-30 09:08:41 0 举报
AI智能生成
机器学习
作者其他创作
大纲/内容
数据融合模块
数据采集
Flume分布式数据采集,用户行为数据
数据迁移
sqoop全量数据导入
sqoop增量数据导入
定时任务
构建画像模块
物品画像
一切能够刻画这个物品的数据都属于物品画像
节目描述信息提取关键词
1.TF-IDF指标
TF 词频
IDF 逆文档词频,可以有效的抑制语气词
Hive:Keyword_idf表
Hive:Keyword_tf_idf表
节目基本属性
创作时间
上映时间
节目时长
。。。。。。
用户画像
一切能够刻画这个用户的数据都属于用户画像
用户行为数据
历史浏览的节目的关键词
分值
浏览时间
衰减系统1/(log(n)+1)
浏览时长
喜好分值
用户基本属性
省份
城市
信息补全方式
离散值(如:职业)
分类算法
连续值(如:薪资)
回归算法
召回策略模块
内容召回策略
计算节目的相似度
节目向量化
TF-IDF
Word2Vec
计算节目的相似性
KMeans算法
LSH局部敏感Hash算法
基于用户历史浏览的节目召回相似的节目
行为召回策略
基于用户对节目的评分矩阵,采用LFM隐语义模型
算法构建两个隐语义矩阵,优化算法:ALS
算法构建两个隐语义矩阵,优化算法:ALS
热门召回策略
流式计算框架去实时统计节目的热度
1.基于用户浏览时长计算出观看百分比
2.Redis hot+1
zincrby
zincrby
实时召回策略
实时计算
内容召回
多路召回
防止出现冷启动问题
增加推荐列表的新颖性
防止信息茧房问题
信息茧房问题:看了军事的内容,之后推荐的都是军事的内容,导致视野变小
排序模型模块 ctr预估
构建训练集
基于所有用户的行为数据构建
反馈数据类型
显式
特点:明确得知用户对物品的喜好程度,如:评价系统
隐式
特点:无法准确的得知用户对物品的喜好程度
用户画像
用户行为数据
用户基本属性
物品画像
Hive:tmp_keyword_weight
Hbase:tmp_keyword_weight
Hbase:tmp_keyword_weight
label标签
0:不喜欢
1:喜欢
算法:分类算法 SparkMLib LogisticRegress
保存模型参数
模型评估指标
混淆矩阵
TP
TN
FP
FN
正确率
acc=(TP+TN)/(P+N)
准确率
pre=TP/(TP_FP)
召回率
recall=TP/P
F-measure
2/(1/pre+1/recall)
微服务模块
生产者
基于用户的召回结果构建测试样本
特征索引
物品画像
测试样本+model = 预测score
消费者
A/B Test模块
AB test
基线桶
实验桶
AAB test
基线桶1
基线桶2
实验桶
Spark调优模块
代码调优
1.避免创建重复的RDD
2.尽可能复用同一个RDD
3.频繁使用的RDD进行持久化
cache
persist
Memory_only
memory_only_ser
memory_and_disk
DISK相关的持久化策略以及带有_2的 不要用
unpersist
4.尽可能多的使用广播变量
每个Executor一份
5.尽可能多的使用高性能算子
mapPartition
foreachPartition
reduceBykey
AggregateBykey
combinBykey
mapPartitionWithIndex
数据倾斜的解决方案
1.提前预聚合
2.提高并行度
1、改变HDFS Block个数 (不建议,复杂)
2.初始化RDD的时候,设置分区数
3.使用shuffle类算子的时候,设置并行度 reduceByKey、join
4.spark.default.parallelism
conf.set(“spark.default.parallelism”,10)
spark-submit --conf spark.default.parallelism =10(推荐)
全局:spark-default.conf
5.repartition、coalesce算子 增加RDD的分区数
repartition(numPartitions)= coalesce(numPartitions, true)
coalesce(numPartitions,isShuffle)
3.过滤掉导致数据倾斜的key
sample采样、wc计算、filter过滤
4.双重reduce聚合
1.随机加前缀
2.第一次聚合
3.去掉前缀
4.第二次聚合
5.join添加随机前缀+分拆RDD
1.筛选导致数据倾斜的key
2.分拆RDD
3.一个RDD添加N以内随机前缀
4.另一个RDD扩容N倍
5.聚合
6.union
6.join导致数据倾斜的key过多
全局加随机前缀,全局扩容N倍
数据本地化
本地化级别
PROCESS_LOCAL
NODE_LOCAL
task计算的数据在本节点的磁盘上
task计算的数据在本节点的其他的进程内存中
NO_PREF
RACK_LOCAL
ANY
调优
spark.locality.wait=3S
//等待节点本地化时间
spark.locality.wait.node = spark.locality.wait
//等待进程本地化时间
spark.locality.wait.process = spark.locality.wait
//等待机架本地化时间
spark.locality.wait.rack = spark.locality.wait
通过spark.locality.wait 来调优
默认是3S 可以提高等待时间增加本地化的级别
但是调优要有度!!!
时间太高,会影响整体执行时间反而过长。
//等待节点本地化时间
spark.locality.wait.node = spark.locality.wait
//等待进程本地化时间
spark.locality.wait.process = spark.locality.wait
//等待机架本地化时间
spark.locality.wait.rack = spark.locality.wait
通过spark.locality.wait 来调优
默认是3S 可以提高等待时间增加本地化的级别
但是调优要有度!!!
时间太高,会影响整体执行时间反而过长。
任务的流程
1.PROCESS_LOCAL如果等待时间超过3s,
Driver重新在此往Executor1中发送,
5次后还不能执行判定Executor资源满了。
降低一级数据本地化级别变为 NODE_LOCAL
Driver重新在此往Executor1中发送,
5次后还不能执行判定Executor资源满了。
降低一级数据本地化级别变为 NODE_LOCAL
2.NODE_LOCAL如果等待3s,重试5次 不能执行;再次降一级
3.RACK_LOCAL依次类推
资源调优
资源调优是计算框架调优的根本
1.加大集群管理的资源Yarn standalone
注意点:核心支持超线程,一个core分配两个thread
24个cores Spark_worker_cores 48
不要忘记预留出25%给系统自己用,剩下的75%来分配
24个cores Spark_worker_cores 48
不要忘记预留出25%给系统自己用,剩下的75%来分配
如果需要10台机器的集群,需要采购11台,有一台作为client用
1、安全
2.、性能差异
1、安全
2.、性能差异
2.增加Executor使用的资源
--executor-cores
--executor-memory
--total-executor-cores
3.调高任务的并行度
0 条评论
下一页