用户画像技术实现之大致思路


用户画像实现的基础功能,准确的应该说是大数据开发相关组件功能的用途。当作学习大数据一个具体的案例,

基本所有项目都是以用户为中心,只是各项目的侧重点不同。

WEB项目相关技术组件不在此讨论。

用户标签数据存储 大数据数据存储组件基本运用较多mysql,hbase,elasticsearch、
1.mysql

MySQL作为关系型数据库,在用户画像中可用于元数据管理、监控预警数据、结果集存储等应用
用户的用户名,昵称,性别等基础信息,标签的定义、管理等一些基本的元数据。用户标签相关数据的一些结果集(比如一天某功能的统计结果)。

2.HBase
是一个高性能、列存储、可伸缩、实时读写的分布式存储系统,同样运行在HDFS之上。与Hive不同的是,HBase能够在数据库上实时运行,而不是跑MapReduce任务,适合进行大数据的实时查询。
系统中用户的购买,点击等数据可以存储到hbase中

3.Elasticsearch

Elasticsearch是一个开源的分布式全文检索引擎,可以近乎实时地存储、检索数据。而且可扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。对于用户标签查询、用户人群计算、用户群多维
透视分析这类对响应时间要求较高的场景,也可以考虑选用Elasticsearch进行存储。Elasticsearch是面向文档型数据库,一条数据在这里就是一个文档,用json作为文档格式。

基于HBase的存储方案并没有解决数据的高效检索问题。在实际应用中,经常有根据特定的几个字段进行组合后检索的应用场景,而
HBase采用rowkey作为一级索引,不支持多条件查询,如果要对库里的非rowkey进行数据检索和查询,往往需要通过MapReduce等分布式框架
进行计算,时间延迟上会比较高,难以同时满足用户对于复杂条件查询和高效率响应这两方面的需求。为了既能支持对数据的高效查询,同时也能支持通过条件筛选进
行复杂查询,需要在HBase上构建二级索引,以满足对应的需要。

PS:

Hbase的rowkey虽然可以组合一些查询条件,hbase二级索引采用索引表的方案。但当复杂,多条件查询hbase有点不适,Elasticsearch可以组合hbase进行相关高效检索。

可以采用Elasticsearch存储HBase的索引信息,以支持复杂高效的查询功能。

Elasticsearch对一些商城或涉及到关键词检索非常适用。mysql不能支持复杂的检索查询,且数据量支持不够大,hbase也不太适合复杂检查,会涉及到大量的索引表。

在作技术选型组合时三者相互结合。

4.REDIS

REDIS一般用做数据缓存,当然也可以做一些型业务处理操作。这里把它当作一种存储方案。可以认为REDIS是mysql的一个补充。可以把用户基础信息等那些不易改变的数据

存在REDIS,可以增强WEB访问的响应速度。

任务的执行调度(可以当作一种管理工具)

常见调度工具
CRONTAB (最简单的方式,一般不使用)
OOZIE(Hadoop自带的)
AZKABAN(开源的一个调度工具)

OOZIE

Oozie是一个基于工作流的调度系统,用来管理Hadoop中的的各种操作。它是运行在Java Servlet容器中的Web应用,并用数据库存储工作流定义及状态等元数据。
Hadoop生态自带调度系统工作流通过DAG(有向无环图)来控制
调度可以基于时间和数据驱动,工作流通过hPDL定义(一种XML流程定义语言),资源文件(脚本、Jar包等)存放在HDFS

Azkaban
Azkaban是由Linkedin公司推出的一个批量工作流任务调度器,Azkaban使用job文件建立任务之间的依赖关系,并提供Web界面供用户管理和调度工作流

Oozie和Azkaban的区别:

两者在功能方面大致相同,只是Oozie底层在提交Hadoop Spark作业是通过org.apache.hadoop的封装好的接口进行提交,而Azkaban可以直接操作shell语句。在安全性上可能Oozie会比较好。
工作流定义:Oozie是通过xml定义的而Azkaban为properties来定义。
部署过程:Oozie的部署相对困难些,同时它是从Yarn上拉任务日志。
Azkaban中如果有任务出现失败,只要进程有效执行,那么任务就算执行成功,这是BUG,但是Oozie能有效的检测任务的成功与失败。
操作工作流:Azkaban使用Web操作。Oozie支持Web,RestApi,Java API操作。
权限控制:Oozie基本无权限控制,Azkaban有较完善的权限控制,供用户对工作流读写执行操作。
Oozie的action主要运行在hadoop中而Azkaban的actions运行在Azkaban的服务器中。
记录workflow的状态:Azkaban将正在执行的workflow状态保存在内存中,Oozie将其保存在Mysql中。
出现失败的情况:Azkaban会丢失所有的工作流,但是Oozie可以在继续失败的工作流运行

 个性化推送

不涉及到推送的算法。对离线数据统计,实时分析做个了解。涉及到spark,flink组件。

后续对用户画像及PV,UV模拟统计等这个示例项目所涉及到技术栈结合大数据组件进行整合