1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| 概念映射 离线数仓 实时数仓 编程接口 HQL+UDF FlinkSQL+UDF Runtime MR/SparkJob FlinkStreaming 数仓抽象 HiveTable StreamTable 物理存储 HDFS Kafka
整体架构 数仓层次更少 尽量减少层次的划分,应用层数据直接写入应用数据库,仓库内不维护应用层 多种数据源存储 实时数仓使用Kafka存储明细与汇总数据 Tair,HBase等缓存存储维度数据 ODS层建设 Binlog,流量日志,系统日志 数据来源尽可能统一 利用分区保证数据局部有序
DW层的建设 解决原始数据中数据存在噪声,不完整和数据形式不统一的情况 形成规范,统一的数据,如果可能的话尽可能和离线保持一致 数据解析->业务整合->脏数据清洗->模型规范化
附带信息应对实时数据的常见问题 内容->生成逻辑->解决问题 唯一键->标记唯一一条数->解决重复数据问题 主键->标记唯一一行数据->分区保证数据有序 版本->对应表结构的版本->解决表结构变化的问题 批次->当数据发生重导时更新批次->解决数据重导
维度数据建设 变化频率低的维度 可以通过将离线仓库的维表数据,同步到缓存 或者通过公共服务提数据 通过维表服务查询,对用户屏蔽细节 变化频率高的维度 通过维度数据的变化的消息构建拉链表 通过事实数据计算衍生维度构建拉链表 注意:可以利用HBase的MIN_VERSIONS方便的构建类似于拉链表的结构 维度的使用 利用UDTF关联 通过使用开发UDTF,利用LATERAL TABLE进行关联 通过重新生成SQL 解析SQL识别维表,以及维表中的字段将原查询转化为:原表.flatMap(维表) 汇总层的建设 对共性指标统一加工 大数据去重指标计算时,可以考虑使用非精确去重减少内存使用 Flink丰富的时间窗口 使用时间窗口后,要设置对应的State的TTL设置 根据主题进行多维汇总 直接使用GroupBy语句,需要转化成append流才能写入Kafka 衍生维度的统一加工 可以利用HBase的版本机制构建实时维表
|