离开大数据-数仓方向,投身 Cloud IDE 领域,在此对大数据方向做一个阶段性总结

大数据方向职能分类

自 谷歌发表了 “三驾马车” 论文(文件系统、MapReduce和 BigTable ) ,Hadoop 在 2008 趋于成熟后,大数据是近十年比较热门的一个方向。

围绕大数据方向的技术侧工作大致可以分为三个方面

  • 基础设施 —— Hadoop 及 各种组件、工具 的 研发、优化、部署运维
    • HDFS —— 存储层
    • YARN —— 计算调度平台
    • Kafka 等 —— 消息队列和数据集成
    • MR、Spark、Flink、Presto、Clickhouse 等 —— 批、流计算(查询)引擎
    • Hive、HSQL —— 表元数据系统及大数据 SQL
  • 数据产品
    • AB 测试平台
    • 可视化/报表平台
    • 大数据开发平台
    • 其他定制化场景
  • 数据开发(数仓)

数仓方向工作流

主流程

业务方 ---[提需求]---> 临时需求 ---[是]---> 需求开发 ---> 数据校验 ---> 数据交付 ---> 结束
                        |
                       [否]
                        |
                        ---> 数据建模 ---> ETL 开发 ---> 数据验证 ---> 上线 ---> 结束

其他方向

  • 数据运维:保证 SLA
  • 数据治理
    • 元数据治理
    • 计算治理
    • 存储治理
  • 数据应用类产品
  • 配置基础设施相关团队落地一些 Feature

大数据领域技术

从数据变换角度,可以分为数据收集 -> 离线 ETL -> 应用 三个步骤,在不同步骤有不同的技术来做支撑

数据收集

数据收集阶段的产出一般是 Hive 表

数据来源主要两大类,分别为

  • 埋点
  • 业务数据库

埋点

主要用来记录用户的行为信息,可进一步细分为客户端埋点和服务端埋点。实现 埋点数据 的收集,一般需要一套称为 日志收集服务 的技术集合(在大数据领域和业务开发日志领域的 ELK 不一样)

  • 网关服务,用于接收公网客户端上报的埋点数据
  • 消息队列,用于日志分流,执行一些简单的流式 ETL,一般使用 Kafka
  • 流式处理引擎,Flink

业务数据库

即业务侧存储在 MySQL、Redis 等数据库中的数据。这些数据不能在业务数据库中进行分析,需要将这些数据 Dump 到数仓中,再进行分析处理,这涉及了 不同数据源中数据的拷贝同步。在实现上一般有两种方案

  • 通过各个数据库提供的现有 API 进行全量同步,比如 MySQL select * from xxx。实现简单但是可能影响业务,适合少量数据。
  • 通过各个数据库提供的主从同步/Dump 特性,进行回放或者异步处理。实现相对复杂,完全不影响业务。

离线 ETL

离线 ETL 过程的输入 是 Hive 表,输出仍然是 Hive 表。 操作表述一般通过 SQL 来实现,一般包括,清洗,数据转换,连接,聚合 等过程,具体参见下文的数仓建模。ETL 过程一般设计如下技术

  • Hive Hadoop 生态中一站式的数仓工具集(主要包括计算(SQL 执行)和元数据管理)
  • HDFS Hadoop 生态中分布式文件系统
  • Spark 计算引擎,比 Hive 原生的 SQL 执行引擎效率更高

数据应用

数据产出后,应用可以分为如下几种:

  • 数据可视化: 可视化的数据,人才能对数据有更直观的感受,最著名的可视化工具有 Tableau,开源的有 Redash
  • 数据定制化应用:具有开发能力的团队,可以基于数仓的数据,开发出各种定制化更高的数据产品
  • 数据分析:基于数仓的数据,分析师可以产出各种报告,辅助决策和运行
  • 支撑业务: AI 团队根据在离线数据训练模型,进行推荐等。

数仓建模

在数仓建模中,其核心的模型是二维表,和 MySQL 中的数据表的概念基本一致。 总的来说,数据建模主要有两种:

  • 范式建模法:关注 主题(实体) 和 关系 (和业务系统基本一致,灵活性,查询效率低)
  • 维度建模法:关注 事实 和 维度 (直观,有利于分析,查询效率高,冗余性高)

在业务系统的设计中一般使用范式建模法(MySQL),在大数据场景,一般使用维度建模法。下文的一些概念都是属于 维度建模法 的范畴

数仓 和 业务数据库 的 一些区别

  • 一般情况下业务数据库在某一时刻,能表示该系统在当前时刻的一个瞬时状态,历史状态一般不可追溯。而数仓是用于分析的,而分析一般要基于时间进行累计,所以数仓一般会保留某个时刻的历史快照。一般是按天为粒度的快照,也就是说,可以追溯某一天的某个时刻的数据状态。这个特性一般是利用 Hive 提供的 分区概念来实现的。
  • 数仓处理的是 TB 、PB 级别的数据,大量使用了空间换时间的策略。
  • 大数据的执行引擎使用的算法必须是可以在多机器多实例并发执行的,因此可选的算法一般都是:暴力扫描 和 归并类算法

事实 Fact 和 维度 Dimension

事实表,顾名思义,就是该类型的表描述了一已经发生的事,比如:文章分省事实表 描述了 某篇文章,每天,在每个省一些指标(阅读次数、阅读人数、从关注页阅读的次数、从 feed 流页阅读的次数 等等)。实时表的字段可以分为两类:

  • 维度键,也就是说这些字段组合起来是可以唯一标识这条记录描述了:何时何地什么事务,在上边的例子中,维度键字段为:article_id、user_id(作者 ID)、province
    • 主键是维度键的子集,比如上边的例子中主键为 article_id、province
  • 指标/度量值,表示这个记录发生了什么,在上边的例子中,指标字段为:vv、uv 等

维度表,描述了一个事务的一些属性,比如 文章维度表,其字段分为两类

  • 主键,比如 article_id
  • 属性,比如发布时间、作者 id 等

星型模型和雪花模型

参考,星型模型和雪花模型等各有优劣在不同的数仓层次可以使用不同的模型来进行建模即可

数仓分层

参考 阿里的数仓规范

技术细节

参见:大数据🏷

大数据新技术

https://cs.brown.edu/~ugur/fits_all.pdf

  • 批流一体
  • OLAP OLTP 一体(HTAP)- 部分 NewSQL 的目标
  • 大数据基础设施容器化