数据仓库概念
数据仓库( Data Warehouse ),是为企业制定决策,提供数据支持的。可以帮助企业,改进业务流程、提高产品质量等。
输入数据形式
数据仓库的输入数据通常包括:业务数据、用户行为数据和爬虫数据等。
- 业务数据(通过Sqoop框架)
各行业在处理事务过程中产生的数据。通常存储在MySQL、Oracle等数据库中。 - 用户行为数据(用文件形式存储,采用Flume框架,存储在hive中)
用户在使用产品过程中,通过埋点收集与客户端产品交互过程中产生的数据,并发往日志服务器进行保存。比如页面浏览、点击、停留、评论、点赞、收藏等。用户行为数据通常存储在日志文件中。
<流量采集也更像是用户行为数据的采集,重点在于分析用户使用的协议、流量的页面等等> - 爬虫数据
通过技术手段获取其他公司网站的数据。
<无载体项目中涉及该部分>
数据仓库对数据的处理
备份(ODS)、清洗(DWD)、聚合(DWS,DWT)、统计(ADS)
数据输出
报表系统、用户画像、推荐系统、机器学习
任务调度工具
Azkaban/Oozie
项目需求
技术选型
Kafka 遇到双十一等数据量很大的时候,可以先将数据缓存到Kafka中,然后慢慢往数仓中写,起到缓冲的作用。
系统数据流程设计
1.项目需求
2.集群规模 - 先假设每台服务器的配置,确定日活跃用户100万,每人每天产生100条日志:100万100=1亿条;每条日志1K左右,每条1亿条;100000000/1024/1024=约100G;半年内不扩容服务器 100G180天=18T;副本数:18*3=54T;预留20%-30%Buf:54/0.7=77T; 如果考虑数仓分层和 压缩,要重新再计算。
3.服务器选型 -选择云主机可以省去运维成本,快速上手;物理机 数据安全、保密,长期打算、资金充足的选物理机。
4.框架版本选型
5.技术选型
- Nginx起到负载均衡的作用,将业务来的数据均衡地分配到各服务器中
- 日志服务器的数据保存30天,数据是最重要的,磁盘是最廉价的
- ZooKeeper是一个分布式协调服务,它的主要作用是为分布式系统提供一致性服务,提供的功能包括:配置维护、命名服务、分布式同步、组服务等。Kafka的运行依赖ZooKeeper。
- HDFS小文件:Har归档、CombineTextInputformat、JVM重用
Apache框架版本
测试集群的搭建
主流埋点方式
目前主流的埋点方式,有代码埋点(前端/后端)、可视化埋点、全埋点三种。
- 代码埋点是通过调用埋点SDK函数,在需要埋点的业务逻辑功能位置调用接口,上报埋点数据。例如,我们对页面中的某个按钮埋点后,当这个按钮被点击时,可以在这个按钮对应的 OnClick 函数里面调用SDK提供的数据发送接口,来发送数据。
- 可视化埋点只需要研发人员集成采集 SDK,不需要写埋点代码,业务人员就可以通过访问分析平台的“圈选”功能,来“圈”出需要对用户行为进行捕捉的控件,并对该事件进行命名。圈选完毕后,这些配置会同步到各个用户的终端上,由采集 SDK 按照圈选的配置自动进行用户行为数据的采集和发送。
- 全埋点是通过在产品中嵌入SDK,前端自动采集页面上的全部用户行为事件,上报埋点数据,相当于做了一个统一的埋点。然后再通过界面配置哪些数据需要在系统里面进行分析。
埋点数据上报机制
埋点数据上报时机包括两种方式。
- 方式一,在离开该页面时,上传在这个页面产生的所有数据(页面、事件、曝光、错误等)。优点,批处理,减少了服务器接收数据压力,网络IO少了。缺点,不是特别及时。
- 方式二,每个事件、动作、错误等,产生后,立即发送。优点,响应及时。缺点,对服务器接收数据压力比较大。
本次项目采用方式一埋点。