2 大数据电商数仓项目——项目需求及架构设计
2.1 项目需求分析
- 用户行为数据采集平台搭建。
- 业务数据采集平台搭建。
- 数据仓库维度建模(核心):主要设计ODS、DWD、DWS、AWT、ADS等各个层的具体功能与实现方法。
- 分析设备、会员、商品、地区 、活动等电商核心主题,统计的报表指标近100个。
- 采用即席查询工具,随时进行指标分析。
- 对集群性能进行监控,发生异常需要报警。
- 元数据管理:最常用的是hive元数据以及存于MySQL中的,能够帮助实现任务调度中的可视化实现。
- 数据质量监控:主要是监控数据的变化与以及质量分析。
- 权限管理。
2.2 项目架构
2.2.1 技术选型
那么根据以上需求我们提出的思考问题:
- 项目技术如何选型?
技术选型主要考虑因素:数据量大小、业务需求、行业内经验、技术成熟度、开发维护成本、总成本预算。
数据采集传输: Flume(用户行为数据)、Kafka(较大数据量时可以先缓冲数据)、Sqoop(业务数据)、Logstash(简单的日志数据)、DataX(业务数据)。
数据存储: MySQL(小量数据存储,如ADS查看报表)、HDFS(海量数据存储,如DWD)、HBase(存储kylin多维分析)、Redis(主要用于实时计算)、MongoDB(如存储爬虫数据,需要同步到数仓里)。
数据计算: Hive、Tez、Spark、Flink、Storm。放在不同的引擎中,计算速度等会有所不同。
数据查询: Presto(快速离线查询)、Kylin(离线查询)、Impala、Druid(快速实时查询)、ClickHouse(实时查询)、Doris。
数据可视化: Echarts(开源免费)、Superset、QuickBI(离线)、DataV(实时快速)。
任务调度: Azkaban(中小企业适用,易上手)、Oozie、DolphinScheduler(国内开源)、Airflow(Python)。
元数据管理: Atlas。
权限管理: Ranger、Sentry。
- 框架版本如何选型(Apache、CDH、HDP)?
- 服务器使用物理机还是云主机?
- 如何确认集群规模?(确认服务器的大小以及数量)
2.2.2 项目流程设计
- 项目需求
- 集群规模
- 服务器选型
- 框架版本选型
- 技术选型
系统数据流程设计
思考问题:
- flume采集日志: flume组成、put事务、take事务、flume三个器、flume优化
- kafka消息缓存: kafka基本信息、kafka挂了、kafka丢了、kafka重复、kafka积压、kafka优化、kafka高效读写原因。
- zookeeper分布式协调: 部署多少台、内部选举机制。
- HDFS: Har归档、CombineTextInputformat、JVM重用。
- sqoop数据同步: 需要考虑常出现的空值、一致性、数据倾斜问题,以及每天导入的数据量、执行时间。
- hive on spark: 数仓分层。
- klyin多维分析: 其处理后的数据存储在HBase中。
2.2.3 框架版本选型
见下图所示:
其中,EMR框架只需要直接选择相应框架的数量等即可一键搭建与部署;MaCcomputer、DataWorks提供独立于EMR之外的一个数据分析框架。
具体版本型号:(以Apache为例)
2.2.4 服务器选型
服务器选物理机还是云主机?
物理机:
一般物理机寿命5年左右,需要专业的运维人员以及考虑电费、放置环境等,一般有长期打算且资金充足的企业会选择物理机。
云主机:
几乎不需要考虑运维工作等因素,直接付费就可以使用,十分适合短期使用,可以即使释放资源。
2.2.5 集群规模
- 如何确认集群规模?(假设:每台服务器8T磁盘,128G内存)
(1)每天日活跃用户100万,每人一天平均100条:100万100条=1亿条
(2)每条日志1K左右,每天1亿条:100000000/1024/1021=约100G
(3)半年内不扩容服务器来算:100G180天=约18T
(4)保存3个副本:18T3=54T
(5)预留20%~30%Buf=54T/0.7=77T
(6)算到这:约8T10台服务器
2.如果考虑数仓分层?数据采用压缩?需要重新再计算
集群资源规划设计
在企业中通常会搭建一套生产集群和测试集群,生产集群运行生产任务,测试集群用于上线前代码编写和测试。
生产集群规划原则:
- 消耗内存的分开,如Hadoop的nn和rm
- 数据传输数据比较紧密的放在一起(如kafka、zookeeper)
- 客户端尽量放在一到两台服务器上,方便外部访问(如hive和spark)
- 有依赖关系的尽量放到同一台服务器(例如Hive和Azkaban Executor)
测试集群服务器规划:
一般测试集群三台服务器即可。
下一章,我们将开始介绍数据生成模块的实现。