Apache Kylin在绿城客户画像系统中的实践
前言
\\作为国内知名的房地产开发商,绿城经过24年的发展,已为全国25万户、80万人营造了美丽家园,并将以“理想生活综合服务提供商”为目标,持续为客户营造高品质的房产品和生活服务。
\\2017年,绿城理想生活集团成立,围绕客户全生活链、房屋全生命周期,为客户提供从买房子到房屋的保养维护,再到业主全方位的生活服务。为此构建了绿城+App生活服务平台、房产营销数字化平台及房屋4S服务平台,这些系统的构建为业主购房及生活服务提供了极大的便利,部分系统不仅开放给绿城客户、业主使用,同时也服务于非绿城的客户。通过一整套垂直行业的用户画像系统构建并使用Apache Kylin加速主要数据服务,有效提升了互联网广告推广、营销服务的效率。
\\一、绿城客户画像系统的背景
\\房产品的营造和线下销售是当前绿城的主营业务,为有效提升服务质量、管理效能,降低营销费用,实现客户服务智能化、销售行为自动化、成本管理合理化,绿城积极拥抱互联网,于2015年开始了数字化营销(Digital Marketing)的探索和研究,通过+互联网创新营销业务。
\\经过2年的探索和模式验证之后,2017年绿城成立了专门的大数据团队,围绕营销全过程和客户全生命周期, 构建了房地产行业首个全闭环的“房产营销数字化平台”,服务于营销找客到成交回款全过程,如下图所示:
\\
图1 绿城房产营销数字化平台
在“房产营销数字化平台”中,精准营销和智慧案场为营销线最核心的两个系统,它们以广告投放、客户数据资产管理、经营指标分析为基础,延展出集合营销知识分享与学习、营销与转化工具、第三方供应商为一体的互联网平台,服务于房地产市场营销产业链生态圈,为Marketing阶段的客户获取提供了一站式程序化解决方案。另外置业绿城、掌上销售等系统则为后续的Sales环节提供数字化服务。
\\精准营销系统和智慧案场系统,基于DMP(Data Management Platform,数据管理平台)的数据分析和处理能力支撑和流转起所有业务逻辑,一方面,绿城DMP系统通过积累营销投放过程中的回流数据,另外一方面又采集置业绿城、全民营销系统(绿粉汇)、掌上销售系统中的埋点行为数据及数据库数据。通过上述种种方式为数字化营销建立更为准确优化的策略,从而真正做到“数据驱动营销”。绿城DMP的数据包含第一、第二和第三方数据:
\\- 第一方数据,即完全自有的数据。企业自身的CRM系统数据、网站和APP等运营活动的应用数据;\\t
- 第二方数据,主要包括程序化广告投放过程中的交易数据;\\t
- 第三方数据,主要为BAT数据、运营商数据等。\
绿城DMP整体的业务架构图如下:
\\
图2: 绿城DMP与系统间的逻辑架构
DMP作为服务于Marketing的核心工具,客户画像发挥着极其重要的作用。客户画像依赖于DMP的标签管理、用户归一化以及营销相关的客户数据,它为房子的营销推广提供决策支持和依据。
\\另外一方面,营销相关运营活动也需要画像系统支持。营销引擎基于用户画像系统,为精准营销、智慧案场系统提供统一的广告投放服务。
\\二、客户画像与Apache Kylin的结合
\\如前所述,客户画像服务于Marketing,其核心的业务流程可以用下图表示:
\\
图3 客户画像的核心逻辑
通过DMP进行数据的采集、融合分析、归一化处理,再基于行业标签,为精准营销系统提供精准的人群画像,并投放到各类媒体及网站,实现对于受众的精准触达。
\\2015~2016年,绿城大数据平台中的数据主要通过Hive + HBase进行存储以及分析计算,后台的数据服务尤其是画像服务,均是基于HBase的Java API开发,那时基本能满足业务秒级的响应需求。但经历2017年的业务高速发展之后,随着渠道及合作方的增多,数据的体量和维度的增加了数十倍,画像等数据服务的响应速度逐渐降至5秒甚至30秒,部分业务查询甚至超过了1min,而且数据源头繁杂、维度众多,需要体系化地管理。为解决这个问题,绿城大数据团队于17年上半年进行标签体系建设形成共13大类、8000+细类的多维度标签,客户画像的构建,便依赖于这个丰富成熟的标签体系。
\\日均300G以上数据会沉淀在大数据平台中,数据体量的增加导致性能瓶颈明显,经过多轮测试、综合对比分析Apache Kudu,Presto,Druid以及Apache Kylin之后,最终选择Apache Kylin作为OLAP工具,最终优化并解决了数据服务查询的性能问题。选择Apache Kylin的主要原因有以下几点:
\\- 成熟度来讲:Apache Kylin和Druid 更为成熟(参照稳定性、性能、社区活跃度等因素)\\t
- 查询效率来讲:Druid ≈ Apache Kylin,优于其他(主要业务场景)\\t
- 实用和便捷性:Apache Kylin搭建和使用均较为便捷(同时也是华人的顶级开源项目)\
另外,Apache Kylin还有以下优点:
\\- Apache Kylin进行预计算,空间换时间,通过预定义、计算Cube的方式提升查询的速度和性能,同时,查询的性能随业务的增长也不会受到影响;\\t
- 数据管理及同步方便。预计算、构建Cube、数据管理都可基于Apache Kylin自行管理;有开放的API可以方便、快速地对接内部数据处理流程、与调度系统打通。\
绿城大数据平台每日增量构建数百GB的Cube,构建的时间从几小时到十几小时不等,之前后台较慢的查询时间范围是从十几到几十秒,使用Apache Kylin后则基本都在1-2秒内即可予以响应。最终优化之后的客户画像构建流程如下:
\\
图4 客户画像构建流程
其中,业务系统数据和Log数据通过采集、传输后,基于Spark进行初步处理,之后包含埋点、运营活动等的结果数据会写入HDFS以及HBase中。一部分客户、楼盘的数据报告和分析服务通过Hive及Spark进行支撑和输出,而主要的数据服务则通过Apache Kylin进行构建。
\\在Kylin中,对于小数据量的Cube,或者经常需要全表更新的Cube,使用全量构建需要更少的运维精力,以少量的重复计算降低生产环境中的维护复杂度。而对于大数据量的Cube,例如对于一个包含两年历史数据的Cube,如果需要每天更新,那么每天为了新数据而去重复计算过去两年的数据就会变得非常浪费,而在这种情况下需要考虑使用增量构建。
\\因为绿城大数据平台的数据每天按日更新,并且日均数据量都会在百G以上,所以我们用到了Apache Kylin的增量构建Cube。Kylin在Web界面上提供了手动构建Cube的操作,此外,Apache Kylin也提供了Rest API进行增量构建。在绿城客户画像系统中,70%的自动化触发增量构建都基于Rest API完成。
\\
图5 Apache Kylin构建Cube的Web页面
我们基于Apache Kylin构建好的数据服务,又通过开源工具Superset进行客户画像中标签数据的可视化分析展示,如下图:
\\
图6 基于Superset的标签画像展示
大数据可视化工具的选择非常丰富。在对比了开源工具Superset、Zeppelin以及商业工具FineBI后,最终采用Airbnb开源的Superset(曾用名Caravel)的主要原因如下:
\\- 数据安全性、权限控制,仅Superset有表检索的权限控制\\t
- 图表多样性,Superset拥有多达30张以上的图表,多表的联动性-filter支持多表联动\\t
- 数据库多元性,Superset既支持关系型数据库,也支持像Apache Kylin这样的大数据框架\\t
- 社区活跃度相对更高\\t
- Superset作为一款开源的BI工具,能够满足我们对于标签画像联动分析的需求,节省了前端、UI的开发资源\
客户画像依赖的数据、后台计算引擎以及标签都构建完成后,绿城客户画像的一瞥如下图所示:
\\三、未来客户画像系统的展望
\\绿城客户画像系统目前只服务于房产营销,随着房屋4S、园区商业、绿城+App生活服务平台的日益成熟,画像系统将融合各业务系统数据,完成客户全生活链用户画像的建设,同时客户画像会融入知识图谱,建立业主与业主、业主与房子之间的连接,从而形成一套更加全面、可视化的用户画像系统。绿城大数据团队将积极拥抱开源、拥抱互联网,拥抱变化,持续用技术和数据驱动绿城各条线的业务发展。
\\作者介绍:
\\秦海龙,绿城理想生活科技有限公司大数据平台负责人。Java语言、Scala语言,Hadoop生态、Spark大数据处理技术爱好者。
相关文章:

linux环境编程--IPC 之 msg queue
消息队列在UNIX的SystemV版本,AT&T引进了三种新形式的IPC功能(消息队列、信号量、以及共享内存)。但BSD版本的UNIX使用套接口作为主要的IPC形式。Linux系统同时支持这两个版本。系统调用msgget() 如果希望创建一个新的消息队列࿰…

2021 IDEA大会圆满落幕,一文回顾大会精彩看点
11月23日,为期两天的2021 IDEA大会在深圳福田圆满落幕。2021 IDEA大会由深圳市福田区人民政府、深圳市福田区科技创新局和粤港澳大湾区数字经济研究院(International Digital Economy Academy,简称“IDEA”)联合举办。深圳市科创委…

【转】Android下编译jni库的二种方法(含示例) -- 不错
原文网址:http://blog.sina.com.cn/s/blog_3e3fcadd01011384.html 总结如下:两种方法是:1)使用Android源码中的Make系统2)使用NDK(从NDK r5开始)---------------------------------源码要求&…

linux下如何修改系统时间
我们一般使用“date -s”命令来修改系统时间。比如将系统时间设定成2018年2月23日的命令如下。 #date -s 02/23/2018 将系统时间设定成下午11点12分0秒的命令如下。 #date -s 11:12:00 注意,这里说的是系统时间,是linux由操作系统维…

thttpd服务器
1 引言随着微处理器技术、计算机网络技术的进步,基于嵌入式WEB的网络数字视频监控系统逐渐得到了人们的广泛关注。把图像采集、视频压缩和WEB功能集中到一个体积很小的设备内,可以直接连入局域网和Internet,达到即插即用,省掉多种…

链接产业 聚变未来 | 移动云区块链开发者论坛来了
有人认为,如果说蒸汽机释放了人们的生产力,电力解决了人们基本的生活需求,互联网改变了信息传递的方式,那么区块链作为构造信任的机器,将可能改变整个人类社会价值传递的方式。区块链已走进大众视野,成为社…

Bzoj4016: [FJOI2014]最短路径树问题
题面 传送门 Sol 先\(SPFA\)求出单源最短路,\(Bfs\)建出树,字典序可以用堆解决 然后就是点分治的一眼题 开桶记录到当前根经过边长度相同的最长路,记录它的长度 自己强行\(yy\)了一个这种类型的点分丑陋写法 # include <bits/stdc.h> #…

libevent源码深度剖析
原文地址:http://blog.csdn.net/sparkliang/article/details/4957667libevent源码深度剖析一——序幕张亮1 前言 Libevent是一个轻量级的开源高性能网络库,使用者众多,研究者更甚,相关文章也不少。写这一系列文章的用意在于&#…

元宇宙中可跨语种交流!Meta 发布新语音模型,支持128种语言无障碍对话
编译 | 禾木木出品 | AI科技大本营(ID:rgznai100)语言交流是人类互动一种自然的方式,随着语音技术的发展,我们可以与设备以及未来的虚拟世界进行互动,由此虚拟体验将于我们的现实世界融为一体。然而,语音技…

前端面试官,我为什么讨厌你。
近两年来,参加过的前端面试不下二十场了,吐槽一下。我所经历的,都是小公司,大公司的同学请无视。 招聘信息能否不要装逼?写一大堆你项目根本用不上的,来给谁看?我曾遇到上面写了一堆对js如何要求…

【ASP.NET Core】解决“The required antiforgery cookie xxx is not present”的错误
当你在页面上用 form post 内容时,可能会遇到以下异常: The required antiforgery cookie "????????" is not present. 咱们来重现一下错误。新建一个 ASP.NET Core 项目,模板选【空】就行了,这是老周最喜欢的项…

linux系统级别的能够打开的文件句柄的数file-max命令
简单的说, max-file表示系统级别的能够打开的文件句柄的数量, 而ulimit -n控制进程级别能够打开的文件句柄的数量.man 5 proc, 找到file-max的解释:file-max中指定了系统范围内所有进程可打开的文件句柄的数量限制(系统级别, kernel-level). (The value …

这封以数字构写的蓝图,正在实现笔尖所触即世界
作者 | 贾凯强出品 | AI科技大本营(ID:rgznai100)一撇一捺,一勾一抹,笔走龙蛇,可见真意。笔者小时候字迹潦草,便总是抱怨为什么一定要写字好看?而如今计算机统治了世界,键盘和鼠标早…

Svn 笔记—— Hooks
pre-commit 钩子功能:[rootDa hooks]# cat /application/svndata/sadoc/hooks/pre-commit#!/bin/bash#Check message lenth ---更新版本时强制输入信息小于5个字符会退出REPOS"$1"TXN"$2"logmsgsvnlook log -t $TXN $REPOS |grep &q…

22.CSS边框与背景【上】
第十七章 CSS边框与背景【上】 一、声明边框 属性 值 说明 CSS版本 1、border-width 长度值 设置边框的宽度(可选) 1 2、border-style 样式名称 设置边框的样式(必选&…
一致性 hash 算法( consistent hashing )
原文地址:http://blog.csdn.net/sparkliang/article/details/5279393consistent hashing 算法早在 1997 年就在论文 Consistent hashing and random trees 中被提出,目前在 cache 系统中应用越来越广泛; 1 基本场景 比如你有 N 个 cache 服务…

【json的使用】
1、json格式字符串:Java代码/** 操作成功 200 */ public static final String RESULT_SUCCESS "{\"code\":\"200\",\"message\":\"成功!\"}";复制代码2、解析json字符串:Java代码JSONObject object…

通过 for 循环,比较 Python 与 Ruby 编程思想的差别
作者 | Doug Turnbull译者 | 豌豆花下猫Python猫来源 | Python猫Ruby 与 Python 之间的差异在很大程度上可通过for循环看出本质。Python 拥有for语句。对象告诉for如何进行协作,而for的循环体会处理对象返回的内容。Ruby 则相反。在 Ruby 中,for本身&…

Blippar放大招,要开源其AR和计算机视觉技术
AR公司Blippar将向第三方开发者提供AR和计算机视觉技术API,来推动他们的AR商业应用解决方案的发展。 致力于用AR技术帮助一些大品牌进行品牌故事和消费者营销的AR公司Blippar,最近对外宣布,要将他们的AR和计算机视觉技术API,提供…

Linux CPU数量判断命令
其实只要 #include <unistd.h>long num sysconf(_SC_NPROCESSORS_ONLN); 便可以获得当前CPU的数量。。。 判断依据:1.具有相同core id的cpu是同一个core的超线程。2.具有相同physical id的cpu是同一颗cpu封装的线程或者cores。 英文版:1.Physical…

5月.CN域名注册量持续上涨至1199万个 净增14万
IDC评述网(idcps.com)06月11日报道:根据中国互联网络信息中心(CNNIC)最新公布的数据显示,在5月份,.CN域名总量持续增至11,990,264个,环比上月,净增143,346个,…

人工智能/云原生/数据科学/计算等方向内容整理志愿者招募了!
持续招募内容整理志愿者!云原生、数据科学、AI、低代码、计算等方向,有意愿的小伙伴,欢迎识别二维码提前报名哦。我们将持续为爱学习、有时间的小伙伴,提供多重福利!要求:1. 你需要具备一定学术背景&#x…

SFB 项目经验-37-分配公网证书 For SFB 2015-持久聊天服务器(图解)
Start-CsWindowsService

三个轻量级WebServer--lighttpd,thttpd,shttpd介绍
国内绝大部分的web server不是IIS就是Apache,而论市场占有率,我认为Apache是大赢家了,至少是占据了半壁江山。但除了IIS/Apache外,其实我们有很多选择,对于高负载/大并发的网站而言,高性能、轻量级的web se…

实验四 主存空间的分配和回收
实验四 主存空间的分配和回收 一、目的和要求 1.1. 实验目的 用高级语言完成一个主存空间的分配和回收程序,以加深对动态分区分配方式及其算法的理解。 1.2. 实验要求 采用连续分配方式之动态分区分配存储管理,使用首次适应算法、循环首次适应算法、最佳…

技术“摸鱼” 大神,国外小哥 5 年白拿 45 万工资!
整理 | 孙胜出品 | CSDN(ID:CSDNnews)自从2017年谷歌旗下的AlphaGo以3比0战胜柯洁后,“人工智能即将取代人类工作”一度成为人们热议的话题。然而最近一位国外小哥用他亲身经历告诉我们,虽然程序终将代替人类执行重复劳…

Python杂篇
一:文件保存 def save_to_file(file_name, contents):fh open(file_name, w)fh.write(contents)fh.close()save_to_file(mobiles.txt, your contents str)结果: 将字符串修改则覆盖原来的字符串 将字符串用变量替代 将 fh open(file_name, w)写的权限去…

整理了 70 个 Python 面向对象编程案例,怎能不收藏?
作者 | 周萝卜来源 | 萝卜大杂烩Python 作为一门面向对象编程语言,常用的面向对象知识怎么能不清楚呢,今天就来分享一波文章很长,高低要忍一下,如果忍不了,那就收藏吧,总会用到的在 Python 中创建一个类及其…

ionic中的ion-option-button
2019独角兽企业重金招聘Python工程师标准>>> 代码 <ion-option-button class"button-assertive" ng-click"df(itemData)">批准 </ion-option-button> 效果图 转载于:https://my.oschina.net/u/1416844/blog/465730

memset函数详细说明
1。void *memset(void *s,int c,size_t n)总的作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c。2。例子#include <stdio.h>#include <string.h>void main(){char s[]"hello";memset(s,*,2);printf("%s",s);} 输出:…