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:临时数据层

      • 用于存放一些临时数据表,中间数据表