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