1. 大数据平台环境与数仓
1.1. 大数据项目开发流程
1.1.1. 开发流程
可行性分析
需求分析
文档设计
代码开发
测试阶段
项目上线
项目维护
1.1.2. 业务模块
数据生成
业务数据
用户数据
商品数据
订单数据
用户行为数据:一般是存储在文件中
记录的是用户在平台的所有的行为
日志数据:机器运行日志,服务运行日志
爬虫数据
第三方数据
数据采集
将所有需要处理的数据采集到的大数据存储平台
数据存储
数据仓库
数据处理:对数据进行处理、分析
数据应用
构建BI可视化展示平台:报表
用户画像
推荐系统
1.1.3. 技术选型
采集工具
kettle:数据量小、开发成本地、功能全面
Sqoop:采集数据库的数据,采集通过MapReduce来实现
将MySQL数据写入Hive(HDFS)
将MySQL写入HDFS:MapReduce
InputFormat
TextInputFormat
DBInputFormat:专门用于读取数据库的数据
Flume:采集数据流或者文件,基于每一条数据采集一次(实时采集)
Canal:采集数据库,性能要比Sqoop好得多
Logstash:实现数据采集的,功能最全,性能相比专业的工具要差一点
数据存储
HDFS:基于文件的存储,大数据量的离线数据持久化存储
用Hive构建数据仓库
Hive:基于数据报表的存储,底层还是存储在HDFS
Kafka:大数据量的实时临时性存储
Hbase:大数据量的实时持久性存储
ES:构建大数据量的全文索引存储
Redis:分布式小数据量的内存式高性能的实时存储
MySQL:小数据量的基于磁盘的存储
数据处理
MapReduce:离线批处理计算
Impala:基于内存的SQL引擎
Spark:功能全面的分析引擎
离线计算:Sparkcore
交互式计算:SparkSQL
准实时计算:SparkStreaming
Flink:实时计算
Kylin:高性能的离线计算
辅助工具:
zookeeper:集群管理
辅助选举
存储关键性的数据
Azkaban:实现任务调度
Oozie:实现任务调度
Hue:实现可视化
FineBI:商业化大数据可视化平台
1.2. 数据仓库
1.2.1. 概念
数据库与数据仓库都是事先数据存储的一种设计模型
1.2.2. 功能
更加规范和统一化的数据管理平台
将企业需要的所有数据进行存储,提供给企业各个需要使用数据的部门进行应用
1.2.3. 流程
数据生成
业务数据:数据库
用户行为数据:日志
机器运行日志:日志
爬虫数据
第三方合作数据
数据采集:通过各种采集工具将不同类型的数据存储在数据仓库中
先放入HDFS
ETL:数据清洗
过滤、转换、补全
对HDFS上的原始数据进行处理,处理好的数据放入数仓
数据仓库:将各种各样的数据进行统一化的存储
分层:规范所有数据进入数仓以后经过哪些步骤的处理,得到最后想要的结果
原始数据:ETL
第一层:存储ETL之后的数据
第二层:对第一层之后的数据简单处理
第三层:第二层之后的数据进行处理
第四层:得到需求方需要的数据
构建数据仓库:
离线数仓:Hive
1.2.4. 功能与应用场景
功能:将所有数据进行统一化规范化的存储
应用场景:面向主题的OLAP,用于对素有的数据进行统一化存储和规范化处理,支撑决策系统
1.2.5. 特点
本身不产生数据
整个公司所有的业务产生的数据都会采集到存储到数据仓库
业务数据
用户行为数据
……
本身不使用数据
面向主题:按照业务对数据进行分类
最终目标:提供给整个公司所有数据的需求方提供对应额的数据
每个需求方需要的数据都不一样,根据需求划分主题
运维分析主题
运营分析主题
类似于超市中的商品分类
数据集成:统一化的存储了所有应用需要的数据
非易失:保证所有数据按照历史归档存储,保证满足一定期效内数据应用
时变性:随着时间的变化,数据是会产生变化的
不断增量添加新的数据
T+1:今天处理昨天的数据
采集:增量采集
全量采集:数据迁移,第一次采集
不断会删除老的数据
数据的聚合
1.2.6. OLTP和OLAP
OLTP:联机事务处理
用于支撑业务存储,记录这些数据,用于提供用户在实现业务时的数据支持
满足行级的事务处理:针对每条数据的增删改查
面向用户业务
OLAP:联机分析处理
用于处理数据的存储
专门用于存储所有相关数据,对数据进行统一存储
根据不同的需求进行规范化的处理,得到最后的数据处理结果,支持决策系统
1.2.7. 整体架构
采集:将各种数据源的数据进行采集
如果比较复杂:就落地HDFS,然后进行ETL
如果比较简单:就直接落地Hive,进入数据仓库
ETL:对原始数据进行数据清洗
入库:对ETL以后的数据存储在数据仓库中
应用:实现数据的应用
业务数据:数据库
用户数据、商品数据、订单数据等
用户行为数据
爬虫数据
日志数据
第三方数据
1.2.7.1. ETL
过滤:过滤非法及不需要的数据
非法IP访问的数据
字段不全的数据
不需要处理
补全:补全需要的数据
IP:补全国家、省份、城市、经纬度
客户端信息:操作系统、浏览器
分析用户在不同操作系统中的分布
转换:将原始数据格式转换为目标格式
1.2.7.2. 数据仓库
对每一层数据的处理
最终构建每个主题需要使用的数据
每个主题不同的分析的数据需求不同,可以拆分不同数据存储集市
数据集市
对数据仓库中的数据按照业务需求划分更小的数据存储单位
一般以部门进行划分集市
集市内部再划分主题
核心设计
分层
建模
1.2.7.3. 应用
数据分析
搜索引擎
推荐系统
风控系统
1.3. 维度和指标
1.3.1. 维度
本质:基于某种条件分析指标,得到结果
理解为看待这个结果的角度
在SQL中体现为:分组的字段
每天每个小时的PV:天、小时
每个地区每天的UV:地区、天
常见维度:
基于时间维度分析
分级:年、季度、月、天、小时
分析一般基于小时分析:hourly分析
通过每个小时的结果的累加得到今天的结果
通过每天的结果累加得到月的结果
通过每月的结果的累计到的季度的结果
通过季度得到年
地域维度
平台维度
用户维度
商品维度
店铺维度
所有的指标都要基于一定的维度分析,才有意义,越精确的明细维度结果就越精确
注意:在数据中只要不是用于反映结果的数值就是维度数据
下钻与上卷
下钻:从一个上层维度降低到一个下层维度
要求:在对上层维度分析时,数据中必须包含下层维度
上卷:从一个下层维度上升到一个上层维度
1.3.2. 指标
本质:通过指标分析的结果来反映一件事情的好坏
必须基于对应的维度来衡量指标的结果
1.3.2.1. 事实
分析的指标的结果就是事实
基于不同的角度来看待这个事实
就是基于不同的维度来分析指标
事实就是基于不同维度分析指标得到的结果
1.4. 数据仓库建模
1.4.1. 建模方法
本质:就是决定了数据仓库中的数据表如何设计
ER建模:一般用于传统的业务数据库建模,英语支撑业务,实现业务上数据的存储
找出整个业务中所有实体以及所有关系
根据所有的实体,构建所有实体的属性
将所有关系以及实体构建成表
维度建模:一般用于数据仓库建模,用于对数据进行存储统计分析描述事实
维度表
事实表
1.4.2. 事实表
基于不同维度下分析各个指标的结果,最终的事实
事实表是数据聚合后依据某个维度生成的结果表
分析的指标类型:
可加数值类型:代表结果可以在任意维度聚合计算
半可加数值类型:在特定一些条件维度下进行聚合是没有意义的
不可加数值类型:转化率
事实表分类:
事务事实表:最原始的分析的结果
基于不同维度下的PV的结果:每个地区每个小时的PV
每天都按照每个小时统计一次
周期快照实时表:基于事务实时表构建的周期的事实表
(周期性地)每天对前一天的数据进行统计
(周期性地)每个月对前一个月的数据进行统计
(周期性地)每年对前一年的数据进行统计
累积快照事实表
本质和应用是不断记录数据发生改变的数据
例如:
每天统计前七天的数据
临时性地统计前六个月的数据
1.4.3. 维度表
一般把能够分类的属性单独列出来,成为维度表,在事实表中维护事实与维度的引用关系。
时间维度表
平台维度表
平台维度id 平台类型 1 IOS 2 Android
地区维度表
1.4.4. 渐变维度
数据维度会发生变化,如何保证维度发生变化的情况不影响事实?
SCD1:直接更新,用于修改错误的维度
SCD2:通过拉链表进行构建,记录所有维度变化的时间
拉链表:以时间段标记每个变化的维度的状态
SCD3:通过单独的列来记录之前的状态
1.4.5. 维度的设计模型
雪花模型
每个层级的维度是独立的一张表
特点:存储更好,引用了大量外检,减少实际数的存储
通过关联具体的维度表实现多级关联
星型模型/星座模型:
特点:保证数据处理的性能更好,但是数据的冗余度高
维度表不用关联其他子维度,直接记录具体的值
所有关联维度放在一张维度表中
1.4.6. 数据仓库分层
1.4.6.1. 分层设计
本质:决定了数据进入数据仓库以后,经过固定的步骤处理,得到最后的结果
1.4.6.2. 常见分层
业务数据复杂,分层就越多
ODS(Operational Data Store):所有数据进入数据仓库第一层,等于存储的是原始数据
原始数据层
数据库:此层的表都存放在数据库中
DWD(Data Warehouse Detail):详细数据层,这层的数据是对ODS层的数据经过处理以后得到的结果
对ODS层数据进行过滤、转换、补全等操作
DWM(Data WareHouse Middle):中间数据层,将上层的数进行轻度的汇总,构建维度等
DWS(Data WareHouse Service):汇总数据层,将上层的数据做最终的汇总,得到不同的主题或者集市
APP/ADS(Application):数据应用层,基于不同主题构建分析应用的结果
其他:
DIM:维度数据层
用于存放维度表
TMP:临时数据层
用于存放一些临时数据表,中间数据表