企业级数仓项目1
要点概括:总结了实际开发一个大数据项目开发流程,先选技术(最好准备两套),将数据流程处理图准备好(说服领导),然后选择使用技术的框架(不同的框架有不同的组合方式),最后选择服务器
所用技术展示:
azkaban、druid、flume、hadoop、hbase、hive、kafka、kylin、linux、oozie、presto、shell sqoop、zookeeper
数仓的概念:
行话:为企业所有决策的制定过程,提供所有数据的支持,帮助改进业务流程,提高产品质量
一般可统计 uv(userview) 顾客书、pv(pageview)浏览页面数量
大概根据下图分析要做的事情
日志采集:用户点击商城页面的时候,从一个页面跳到另一个页面再推出的过程记录
业务系统:涉及金钱交易的部分
爬虫系统:有可能企业数据不全面,某些数据只能通过爬取别的网站信息才可以得到
etl:表示对数据进行清洗,分类,重组,合并,拆分,等等等等
报表系统:需要提交给老板做决策的,一定要实现的业务功能
用户画像:通过给每个用户打上标签,可以更好的实现商品推荐,锁定用户爱好
推荐系统:通过推荐系统,对用户投其所好,增加商品变现的可能,具体实现需要依靠机械学习
机械学习:通过算法,将各种用户购买习惯转化为数值
风控系统:对某些危险的行为可以进行监控,达到紧急避险的目的
数仓项目流程设计(重要):
要做的事情:
- 数据采集平台搭建
- 实现用户行为数据仓库的分层搭建
- 实现讹误数据库的分层搭建
- 对数据仓库中的数据进行,留存、转化率、复购率、活跃度等情况,分析报表
要思考的事情:
项目用什么技术(用什么框架)
框架版本如何选择(apache、cdh、hdp)
服务器使用物理机还是云主机?(阿里云)
如何确定集群规模?(假设每台服务器8T硬盘)
遇到问题,要知道自己会什么,该怎么用才行。
问题解决思路
数据采集方案
读取数据 flume
kafka 限流晓峰
sqoop etl 数据导入 (dataX 也可以代替)
这是一套技术选型,解决方案,下面还有第二套
logstash 可以自己完成一套上面三个的功能
数据存储方案
mysql 用来存放业务数据,可视化数据
HDFS 存放各种各样的数据,用来分析的
hbase 可以用作实时的数据处理,一般是配合kylin
mongodb 用来存放爬虫数据
数据计算
hive 计算底层是mapreduce 所以很慢,可以配合 tez 一起使用,数据放在内存
spark 超快计算引擎,绝对主流
flink 实时计算,超级优秀,绝对主流
我们有的时候必须选用hive来进行大规模数据计算,否则跑了一天的spark程序,最后快结束了,给你报了个oom,内存泄漏,你列开吧
数据查询
presto 与impala同级别
druid 预计算,来一些算一些,但是有偏差
impala 与presto同级别
kylin 预计算,但是要间隔时间定时计算
实际流程
如图:
简单解读:
我们的数据来源一般有两个方面:
用户交易数据,比如订单
用户买点数据,比如页面停留时长,点赞等
我们先要实现的需求肯定是业务数据。
kafaka的数据可以做到灵活处理,而不是再创建一个flume生产线,所以kafka不可或缺
框架选择
apache 运维麻烦,组件兼容性需要自己调研,(大厂使用)
cdh: 国内使用众多,但是不开源,但其实对开发来说没有影响
hdp: 开源,可以二次开发,但没有apache稳定,国内使用少
我们选择cdh,图形化页面操作,相对简单
apache框架使用配件版本:
服务 | 版本 |
---|---|
hadoop | 2.7.2 |
flume | 1.7.0 |
kafka | 0.11.0.2 |
Kafka manager | 1.3.3.22 |
sqoop | 1.4.6 |
mysql | 5.6.24 |
azkaban | 2.5.0 |
java | 1.8 |
zookeeper | 3.4.10 |
presto | 0.189 |
cdh版本
服务 | 版本 |
---|---|
hadoop | 2.6.0 |
spark | 1.6.0(实际2.0以上) |
flume | 1.6.0(与1.7没差) |
hive | 1.1.0 |
sqoop | 1.4.6 |
oozie | 4.1.0 |
zookeeper | 3.4.5 |
impala | 2.9.0 |
服务器选择
要从两个方面考虑:
机器成本:
物理机: 128g ,20核物理内存,40线程,8t hdd, 2t ssd,戴尔,单价4w出头,还要考虑托管服务器费用。一般物理机寿命5年。还要分单电源多电源,ups电源会让你的服务器永不断电
云主机:以阿里云为例,差不多相同配置,每年5w
运维成本:
物理机:要有专门运维人员
云主机:很多运维工作都要找阿里完成。
集群规模:
根据日活来判断,举个例子:
每天日活跃用户100wan,每人一天100条,数据量就是1亿条了
一条日志1k左右,一天1亿条:1亿 /1024/1024 约为100g
想要半年内不扩容的话,需要100g *180天 约为 18t
集群副本 18t *3 54t
预留出 20% 到 30%的空间 54t / 0.7 约为77t
大约需要8t *10台服务器
数仓中的数据详细规划:
要扩充1 到 2 倍,后面再说
集群软件安装:
分为生产集群(10台?)与测试集群(三台)
以三台为例
耗内存大的要分开放
客户端(hive)放在一类服务器中
tomcat(网站) 放在一个服务器中
总结:给领导报项目如何做
技术选型,给老板提出两套方案,一套熟悉,一套陌生
系统流程,画一个大流程图,数据的走向描述明确
项目版本设计,画图表明,软件之间用什么版本不会出错
服务器选择,分析利弊
服务器资源规划,需要根据用户日活进行计算,合情合理