第2章 项目需求及架构设计
2.1 项目需求分析
-
用户行为数据采集平台搭建
用户行为数据会以文件的形式存储在服务器,这个阶段需要考虑:采集用户行为数据使用的工具,需要提供详细的设计需求
如:flume,flume采用的 source、channel、sink以及flume代码的设计
-
业务数据采集平台搭建
将mysql中的业务数据导入到hive数仓中使用什么工具
如:sqoop的安装、配置、使用
-
数据仓库的维度建模
数仓建模的分层:Ods原始数据层、dwd数据清洗层、dws以天为单位的轻度聚合层、dwt粗粒度聚合层、ads指标层
-
分析,设备、会员、商品、地区、活动等电商核心主题,统计的报表主题近100个
对老板关系的指标进行汇总分析
-
采用即席查询工具,随时进行指标分析
临时查询指标,可以快速查询出想要的结果情况
-
对集群性能进行监控,发生异常需要报警
如:hadoop某一进程出现了宕机,需要即使的进行报警处理,通过邮件、短信或者钉钉的方式通知开发人员,便于及时解决集群的异常
-
元数据管理
可以以图形的方式显示任务间的依赖关系,如果某一job的运行过程出现异常,可以通过血缘关系图查看受影响的job,从而挑选出优先级最高的job顺序解决
在没有元数据管理的情况下,查询job间的影响关系。需要通过调度工具的脚本查看调度关系,手动进行查询。不便于数据的管理
-
数据质量监控
时刻监控近期指标间的差异,如果近期指标差异超过指定数值则通过短信、邮件或钉钉进行报警,让监控人员快速响应处理
如:两天内指标差异超过30%以上通过短信、邮件或钉钉进行报警
-
权限管理
通过权限管理实现不同权限的用户可以看到不同的表、或者不同权限的用户可以看到某张表中不同的字段
2.2 项目框架
2.2.1 技术选型
-
技术选型要考虑的因素
数据量大小: 根据数据量的大小决定使用hdfs存储或者使用mysql存储数据
业务需求: 根据实时数据的计算或者离线数据的计算来选择flink、spark或者hive
行内经验: 根据行业内大厂所使用的技术框架进行技术选型
技术成熟度: 技术的成熟度决定是否使用该技术 如:是否有成熟版本、是否有大厂在生产环境下使用、通常情况下中小型公司都会等待大厂调查成熟后才会使用
开发维护成本: 结合公司情况,选择云服务器和物理服务器。需要考虑的因素有场地、维护人员、维护设备等方面。
总成本预算: 因为项目经理也需要向公司申请资金,或许申请的资金达不到预期金额
-
数据采集传输
Flume: 日志文件的采集 如:将用户行为数据以json的形式存储在csv文件中,通过flume导入到hdfs中
sqoop: 业务数据的传输 如:将mysql的业务数据导入到hive中
kafka: 缓冲消峰的作用
logstash: 与flume相同,只不过logstash是领英团队开发的与Es、Kibana为一套框架,理论来说elk框架之间的兼容性是最好的。而且ELK主要针对中小型公司或者数据量小的公司分析的指标不是很复杂DataX:
-
数据存储
Mysql: 存储小量数据,一般会将ads的指标存入mysql中供BI人员展示。
Hdfs: 存储大量数据
Hbase: 很多情况下会与kylin组合使用,kylin会将数据存储到Hbase中
Redis: 基于内存的数据库、存储实时数据
MongoDB: 爬虫数据一般会存储于MongDB中
-
数据计算
Hive: 数据走MR程序需要落盘所以速度较慢
Tez: 完全在内存中进行计算,内存消耗强但是查询速度快
Spark: 部分数据在内存中、部分数据在磁盘里。相对MR引擎会快
Flink/ Stom: 主要用于实时数据的计算
-
数据的查询
Presto/Kylin/Impala:通常情况离线查询会选择的框架
Druid/ClickHouse/Doris:实时查询选择的框架
-
数据可视化
Echarts(开源免费)、
Superset(开源免费)、
QuickBi(ali收费针对离线)、
DataV(ali收费针对实时)、
fineReport(付费与免费版本的区别在于并发访问仅支持2个,以及部分功能的水印)
-
任务调度
Azkaban(中小型公司的选择、简单实用、上手快框架较轻)、
Oozie(功能多框架重)
DolphinScheduler(丰富的可视化页面)
Airflow(python编写,懂python适合)
-
集群监控
服务器组件宕机能够及时检测到
Zabbix(离线)、Prometheus(实时)
-
元数据管理
Atlas(中大公司使用):任务量少只有几十个任务,使用atlas的意义并不大。与手动查看任务的效率区别并不大、
任务量多有成百上千的任务,atlas的意义便会很大、图形化界面通过肉眼查看血缘关系图找到受影响的job,从而挑选出优先级最高的job顺序解决
-
权限管理
Ranger(主流): 通过权限管理实现不同权限的用户可以看到不同的表、或者不同权限的用户可以看到某张表中不同的字段
2.2.2 系统数据流程设计
- 项目需求: 无论做什么项目首先需要对项目需求进行了解
- 集群规模: 需要了解企业数据量的大小
- 服务器选型: 先了解企业购买服务器、没有的情况下建议物理机还是云服务器
- 框架的版本:
可以选择免费的apache(运维麻烦、需要考虑组件兼容性问题)
也可以选择CDH(CDH已经开始收费了1万美金/年,目前官网不再提供免费安装包。旧版本安装包依旧可以照常使用,但是不能确定的是一段时间后是否也会开启收费策略,在已经部署并且存在大量数据的前提下,突然收费会造成很多不必要的麻烦)
2.2.3 框架版本选型
具体版本号
2.2.4 服务器选型
- 服务器的选择
服务器选择物理机还是云主机?
1) 物理机:
以128G内存,20核物理CPU,40线程,8THDD和2TSSD硬盘,戴尔品牌
单台报价4W出头。一般物理机寿命5年左右。
需要有专业的运维人员,平均一个月1万。电费也是不少的开销。
2)云主机:
云主机:以阿里云为例,差不多相同配置,每年5W。
很多运维工作都由阿里云完成,运维相对较轻松
3)企业选择
金融有钱公司和阿里没有直接冲突的公司选择阿里云
中小公司、为了融资上市,选择阿里云,拉到融资后买物理机。
有长期打算,资金比较足,选择物理机。
2.2.5 集群规模
- 如何确认集群规模?
(假设:每台服务器8T磁盘,128G内存)
(1)每天日活跃用户100万,每人一天平均100条: 100万100条=1亿条
(2)每条日志IK左右,每天1亿条:I00000000/1024/1024=约100G
(3)半年内不扩容服务器来算:100G180天=约18T
(4)保存3副本:18T3=5.4T
(5)预留20%-30%Buf=54T/0.7-77T(6)算到这:约8T*10台服务器
2.2.6 集群资源规划设计
在企业中通常会搭建一套生产集群和一套测试集群。生产集群运行生产任务,测试集群用于上线前代码编写和测试。
1)生产集群
(1)消耗内存的分开
(2)数据传输数据比较紧密的放在一起(Kafka 、Zookeeper)
(3)客户端尽量放在一到两台服务器上,方便外部访问
(4)有依赖关系的尽量放到同一台服务器(例如:Hive和Azkaban Executor)
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|
nn | nn | dn | dn | dn | dn | dn | dn | dn | dn |
| | rm | rm | nm | nm | nm | nm | nm | nm |
| | nm | nm | | | | | | |
| | | | | | | zk | zk | zk |
| | | | | | | kafka | kafka | kafka |
| | | | | | | Flume | Flume | flume |
| | Hbase | Hbase | Hbase | | | | | |
hive | hive | | | | | | | | |
mysql | mysql | | | | | | | | |
spark | spark | | | | | | | | |
Azkaban | Azkaban | | | | ES | ES | | | |
2)测试集群服务器规划
服务名称 | 子服务 | 服务器 | 服务器 | 服务器 |
---|
| | hadoop102 | hadoop103 | hadoop104 |
HDFS | NameNode | √ | | |
| DataNode | √ | √ | √ |
| SecondaryNameNode | | | √ |
Yarn | NodeManager | √ | √ | √ |
| Resourcemanage | | √ | |
Zookeeper | Zookeeper Server | √ | √ | √ |
Flume(采集日志) | Flume | √ | √ | |
Kafka | Kafka | √ | √ | √ |
Flume(消费Kafka) | Flume | | | √ |
Hive | Hive | √ | | |
MySQL | MySQL | √ | | |
Sqoop | Sqoop | √ | | |
Presto | Coordinator | √ | | |
| Worker | | √ | √ |
Azkaban | AzkabanWebServer | √ | | |
| AzkabanExecutorServer | √ | | |
Spark | | √ | | |
Kylin | | √ | | |
HBase | HMaster | √ | | |
| HRegionServer | √ | √ | √ |
Superset | | √ | | |
Atlas | | √ | | |
Solr | Jar | √ | | |
服务数总计 | | 19 | 8 | 8 |