摘要:搭建这个平台最费时耗力的事莫过于对批、流作业的编排,作业组织管理以及任务调度了。但是这一切,用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的实时作业开发,分分钟搭建企业个性化推荐平台相关推荐

  1. ESP8266基于WIN10+UBUNTU18.04的开发环境搭建(RTOS 3.2)(比较水)

    ESP8266基于WIN10+UBUNTU18.04的开发环境搭建(RTOS v3.2) 软件基础环境参考 硬件环境参考 软件环境安装的详细内容 软件基础环境参考 WIN10家庭版1803的64位版本 ...

  2. 【转载】用开源软件搭建企业内部协作平台, Kill QQ MSN

    作为公司的一分子, 您可能忧心忡忡于通过 MSN, QQ 流入的各种名目繁多的病毒, 木马, 例如熊猫烧香, 以及通过 MSN 传播的导致公司网络瘫痪的蠕虫病毒. 换句话说, 我们需要企业内部协作平台 ...

  3. 用开源软件搭建企业内部协作平台, Kill QQ MSN

    作为公司的一分子, 您可能忧心忡忡于通过 MSN, QQ 流入的各种名目繁多的病毒, 木马, 例如熊猫烧香, 以及通过 MSN 传播的导致公司网络瘫痪的蠕虫病毒. 换句话说, 我们需要企业内部协作平台 ...

  4. 搭建企业知识管理平台,走出“数据孤岛”困境

    编者按:企业发展过程中产生的数据信息,无疑是企业的一笔重要知识资产,而"数据孤岛"问题是很多企业不得不面对的难题,如何走出这种困境,有效对企业知识资产进行挖掘保护,对企业管理者和企 ...

  5. ASP.NET搭建企业微信公众平台源码

    ASP.NET搭建企业微信公众平台源码 源码分享!私信获取 一.源码特点 指引你如何搭建企业微信公众平台,几乎囊括了微信公众平台常规使用的功能,代码简洁明了,所有重点都有注释. 二.菜单功能 1. W ...

  6. 微信公众平台开发之基于百度 BAE3.0 的开发环境搭建(MyEclipse + SVN)

    转载请标明出处,谢谢!  版本说明:     V1:          2014-3-30 版 前言: 因为要进行微信开发,就必须要成为微信开发者,要想成为微信开发者,就必须要有服务器响应微信的 To ...

  7. 基于Linux服务器的JAVA开发环境搭建

    Linux服务器开发环境搭建 Linux安装Java 一.使用yum查询JDK 二.执行安装命令 三.验证java是否安装成功 四.安装开发环境 Linux安装Nginx 一.安装前环境检查 二.下载 ...

  8. 一键迁移接口,即刻搭建企业接口开放平台 - YesApi接口大师v3.15

    企业自建API接口开放平台的解决方案 根据百度百科的定义, 开放平台(Open Platform) 在软件行业和网络中,开放平台是指软件系统通过公开其应用程序编程接口(API)或函数(function ...

  9. 利用钉钉【上下游组织】搭建企业外部协作平台

    你是不是在外部合作中也经常遇到以下情况: "不同的合作企业有的在钉钉,有的在微信,需要来回切换平台沟通" "几天没联系,对接人消息也不回,电话也不接,等终于联系上说'我离 ...

最新文章

  1. 1.3-date命令
  2. 敏捷团队如何通过Leangoo领歌迭代看板进行迭代规划和任务协同
  3. 99% 的新移动恶意程序是针对 Android
  4. python中中括号中的负数
  5. hilb--生成Hilbert(希尔伯特)矩阵
  6. InvokeWebServiceActivity
  7. Android中网络请求创建单个线程池的方法
  8. python捕捉线程错误_Pythonrequests多线程抓取出现HTTPConnectionPoolMaxretiresexceeded异常...
  9. ado.net的操作查询数据 0127
  10. 【2】最简单的Laravel5.1程序分析
  11. python经典程序实例_Python入门经典实例(一)
  12. python django开发api_基于Django框架开发Restful api
  13. 游戏筑基开发之学生管理系统数据结构及数据结构解析图(C语言)
  14. select选中值传递到后台action中
  15. 数据库系统概论第五版_第九章:关系查询处理和查询优化
  16. 扩展:数据库笔试题集合-2
  17. ue4渲染速度太慢_看虚幻引擎技术大神分享烧脑干货《克服VR眩晕之帧数:提升UE4内容实时渲染效率》...
  18. 比较好些的计算机论文题目,计算机论文题目大全(24页)-原创力文档
  19. Matlab中图形对象属性gca使用
  20. unity 模型销毁_Unity中销毁游戏对象的方式

热门文章

  1. Bootstrap 标签和徽章
  2. CSS 元素的定位之相对定位 position: relative
  3. robot motion planning介绍
  4. 视觉SLAM笔记(46) 基本的 VO
  5. linux 扩根目录,linux根目录扩容
  6. java jpanel隐藏_java – 绘制JPanel隐藏菜单
  7. 查询没有走索引_关于MySQL种的in函数到底走不走索引、我和同事差点大打出手!...
  8. idea类前面有个j_idea中所有Java类标识变成一个J
  9. python制作软件界面_Python 脚本 GUI 界面生成工具
  10. typedef 及其与struct的结合使用