基于DAYU的实时作业开发,分分钟搭建企业个性化推荐平台
摘要:搭建这个平台最费时耗力的事莫过于对批、流作业的编排,作业组织管理以及任务调度了。但是这一切,用DAYU的数据开发功能几个任务可通通搞定。
大多数电商类企业都会搭建自己的个性化推荐系统,利用自己拥有的用户数据、商品数据、用户行为数据以及各种维度计算得来的标签画像计算用户偏好,推荐最佳商品给用户,最大化地促进交易。
一个典型的推荐系统包括批处理计算、实时处理层、推荐应用3部分,是典型的Lamda架构。
搭建这个平台最费时耗力的事莫过于对批、流作业的编排,作业组织管理以及任务调度了。但是这一切,用DAYU的数据开发功能几个任务可通通搞定。当然,你可能会说,不是有专门的个性化推荐云服务吗,直接用它不香吗?这里我们不比赛举杠铃,如果企业还不具备利用各种推荐算法的能力,那直接花点钱买推荐服务是最佳选择;但是你如果想最大化地、持续地优化推荐算法的效果,框架还是自己搭比较靠谱。这里给一个例子,展示如何利用DAYU快速完成一个简单的推荐系统。除了DAYU的数据开发,还需要搭配华为云的DLI、DIS、MRS-HBase。
首先介绍下DAYU开发的两种作业类型:
- 批作业
批作业只能被调度触发,任务执行一段时间必须结束,换句话说就是任务不能无限时间持续运行。作业是多个算子(一个也可以)组成的Pipeline,Pipeline作为一个整体被调度。 - 实时作业
实时作业这个名字其实不准确,实际上它可以是一个流、批混合的作业,也可以是个纯实时流处理作业,也可以是个单纯的批作业。作业是由多个算子组成的Pipeline,相对批作业,实时作业中每个算子可单独被配置调度策略,而且算子启动的任务可以永不下线,这样就可以调度那些always online的Flink、SparkStreaming流处理作业。在实时作业里,带箭头的连线仅代表业务上的关系,而非任务执行流程,更不是数据流。
这个推荐系统的后台就使用实时作业来实现,一个流、批混合的作业,直接给个全景图:
这里涵盖了一个简单推荐系统的主要计算流程。更多算法的任务流程这里没有完全展示出来,例如基于模型的算法、基于深入学习的推荐算法,也不包含各种推荐指标的计算过程,有兴趣的同学可以百度学习。
整个任务中包括9组数据处理流程,6个批作业流程,3个实时作业:
批处理流程
从上到下,依次计算:
1)基于个用户特征、标签计算推荐列表
周期:每天一次
计算:每天通过CDM从RDS抽取用户数据到DLI,基于每个用户的基本信息,年龄、性别、职业、收入、地域等等各种属性信息,以及来自360度画像系统的标签信息,生成推荐列表,保存到HBase中。
2)基于商品的相似性特征,计算推荐列表
周期:每天一次
计算:每天通过CDM从RDS抽取新增商品信息到DLI,然后计算出来的基于商品相似特征的推荐列表,存入HBase中。
3)计算当天用户的偏好,生成日推荐列表
周期:每天一次
计算:通过DIS dump转储任务,把网站实时搜集的用户行为信息转储到OBS中,通过一批Spark算法(批量的用户协同、商品协同、基于内容相似性、LR等算法),基于一天的行为数据计算推荐列表。然后把列表推到HBase中。
4)计算本周用户的偏好,生成周推荐列表
周期:每天一次
计算:计算行为同上,区别是基于一周的行为数据计算推荐列表。
5)计算3个月内的偏好,生成长期偏好推荐列表
周期:每天一次
计算:计算行为同上,区别是基于3个月的行为数据计算推荐列表。
6)计算流行产品的列表
周期:每天或者数小时
计算:通过用户总体商品的点击、搜索、评分等行为,基于OBS上用户的行为数据,按类别计算热门商品Top50。这个列表也可作为补齐列表,当其他推荐列表还不足以填满网站的推荐位,可以用这个列表补齐。
实时流处理流程
1)实时计算用户偏好--Item-Based协同算法
计算:通过Flink任务对DIS用户行为通道的数据进行消费,先把用户行为日志转换为标准行为(Time,userid,ItemID,Score),再通过流式Item-Based协同算法计算推荐列表,更新到HBase中。
2)实时计算用户偏好--User-Based协同算法
计算:同上,区别是使用流式User-Based协同算法计算推荐列表,更新到HBase中。
3)实时计算用户偏好--Content-Based算法
计算:同上,区别是使用流式Content-Based协同算法计算推荐列表,更新到HBase中。
以上一顿操作,在HBase中会有一堆以UserID、Item为Key的推荐列表,形如:
用户推荐列表结果:
userid_001:item100, item899, item 433, item 666,....
userid_002:item220, item334, item 720 item 666,....
userid_003:item728, item899, item 333, item 632,....
根据用户实时行为、历史行为不同周期,有若干组不同的推荐列表。
基于商品的推荐列表结果:
Item_0001: Item1000,Item333,time5213,...
Item_0002: Item1000,Item333,time5213,...
Item_0003: Item1000,Item333,time5213,...
另外,推荐系统平台还需要一个提供rest接口的服务,供web网站推荐位调用。当用户打开网页时,自动向该服务请求当前用户的推荐列表,服务访问HBase,获取前面作业计算出来的多个推荐列表,并按一定策略组合成一个推荐列表返回给网页,就此,完成了一个端到端的推荐业务流程。
一个完整的推荐系统要更复杂一些,这里并没有讨论推荐系统的专题内容。从例子可以看出DAYU具备强大的编排和调度能力,单单一个任务就可以涵盖非常复杂的场景。实时上,大型的推荐系统平台还是需要针对性的定制,因为涉及到一些管理上的流程需要应对、闭环。不过基于华为云体系下各种平台、应用,有了DAYU这个助手,数据相关的方方面面的事务处理,将变得既简洁又高效。
本文分享自华为云社区《基于DAYU的实时作业开发,分分钟搭建企业个性化推荐平台》,原文作者:Loading... 。
点击关注,第一时间了解华为云新鲜技术~
基于DAYU的实时作业开发,分分钟搭建企业个性化推荐平台相关推荐
- ESP8266基于WIN10+UBUNTU18.04的开发环境搭建(RTOS 3.2)(比较水)
ESP8266基于WIN10+UBUNTU18.04的开发环境搭建(RTOS v3.2) 软件基础环境参考 硬件环境参考 软件环境安装的详细内容 软件基础环境参考 WIN10家庭版1803的64位版本 ...
- 【转载】用开源软件搭建企业内部协作平台, Kill QQ MSN
作为公司的一分子, 您可能忧心忡忡于通过 MSN, QQ 流入的各种名目繁多的病毒, 木马, 例如熊猫烧香, 以及通过 MSN 传播的导致公司网络瘫痪的蠕虫病毒. 换句话说, 我们需要企业内部协作平台 ...
- 用开源软件搭建企业内部协作平台, Kill QQ MSN
作为公司的一分子, 您可能忧心忡忡于通过 MSN, QQ 流入的各种名目繁多的病毒, 木马, 例如熊猫烧香, 以及通过 MSN 传播的导致公司网络瘫痪的蠕虫病毒. 换句话说, 我们需要企业内部协作平台 ...
- 搭建企业知识管理平台,走出“数据孤岛”困境
编者按:企业发展过程中产生的数据信息,无疑是企业的一笔重要知识资产,而"数据孤岛"问题是很多企业不得不面对的难题,如何走出这种困境,有效对企业知识资产进行挖掘保护,对企业管理者和企 ...
- ASP.NET搭建企业微信公众平台源码
ASP.NET搭建企业微信公众平台源码 源码分享!私信获取 一.源码特点 指引你如何搭建企业微信公众平台,几乎囊括了微信公众平台常规使用的功能,代码简洁明了,所有重点都有注释. 二.菜单功能 1. W ...
- 微信公众平台开发之基于百度 BAE3.0 的开发环境搭建(MyEclipse + SVN)
转载请标明出处,谢谢! 版本说明: V1: 2014-3-30 版 前言: 因为要进行微信开发,就必须要成为微信开发者,要想成为微信开发者,就必须要有服务器响应微信的 To ...
- 基于Linux服务器的JAVA开发环境搭建
Linux服务器开发环境搭建 Linux安装Java 一.使用yum查询JDK 二.执行安装命令 三.验证java是否安装成功 四.安装开发环境 Linux安装Nginx 一.安装前环境检查 二.下载 ...
- 一键迁移接口,即刻搭建企业接口开放平台 - YesApi接口大师v3.15
企业自建API接口开放平台的解决方案 根据百度百科的定义, 开放平台(Open Platform) 在软件行业和网络中,开放平台是指软件系统通过公开其应用程序编程接口(API)或函数(function ...
- 利用钉钉【上下游组织】搭建企业外部协作平台
你是不是在外部合作中也经常遇到以下情况: "不同的合作企业有的在钉钉,有的在微信,需要来回切换平台沟通" "几天没联系,对接人消息也不回,电话也不接,等终于联系上说'我离 ...
最新文章
- 1.3-date命令
- 敏捷团队如何通过Leangoo领歌迭代看板进行迭代规划和任务协同
- 99% 的新移动恶意程序是针对 Android
- python中中括号中的负数
- hilb--生成Hilbert(希尔伯特)矩阵
- InvokeWebServiceActivity
- Android中网络请求创建单个线程池的方法
- python捕捉线程错误_Pythonrequests多线程抓取出现HTTPConnectionPoolMaxretiresexceeded异常...
- ado.net的操作查询数据 0127
- 【2】最简单的Laravel5.1程序分析
- python经典程序实例_Python入门经典实例(一)
- python django开发api_基于Django框架开发Restful api
- 游戏筑基开发之学生管理系统数据结构及数据结构解析图(C语言)
- select选中值传递到后台action中
- 数据库系统概论第五版_第九章:关系查询处理和查询优化
- 扩展:数据库笔试题集合-2
- ue4渲染速度太慢_看虚幻引擎技术大神分享烧脑干货《克服VR眩晕之帧数:提升UE4内容实时渲染效率》...
- 比较好些的计算机论文题目,计算机论文题目大全(24页)-原创力文档
- Matlab中图形对象属性gca使用
- unity 模型销毁_Unity中销毁游戏对象的方式
热门文章
- Bootstrap 标签和徽章
- CSS 元素的定位之相对定位 position: relative
- robot motion planning介绍
- 视觉SLAM笔记(46) 基本的 VO
- linux 扩根目录,linux根目录扩容
- java jpanel隐藏_java – 绘制JPanel隐藏菜单
- 查询没有走索引_关于MySQL种的in函数到底走不走索引、我和同事差点大打出手!...
- idea类前面有个j_idea中所有Java类标识变成一个J
- python制作软件界面_Python 脚本 GUI 界面生成工具
- typedef 及其与struct的结合使用