现代大数据技术栈核心知识总结
大数据领域技术很多,但不需要单纯记技术名称。理解大数据技术最好的方式,是搞清楚每项技术解决什么问题。
整体可以分成:数据存储、数据传输、数据计算、数据组织、数据查询分析几个部分。
一、整体技术架构
一个典型的大数据系统可以简单理解为:
text
业务系统 / MySQL / 日志
│
↓
Kafka
数据传输
│
┌────┴────┐
↓ ↓
Spark Flink
批量计算 实时计算
│ │
└────┬────┘
↓
HDFS / S3 / OSS
大数据存储
│
Hive / Iceberg
数据表组织
│
┌────┴────┐
↓ ↓
ClickHouse HBase
OLAP分析 Key点查
可以简单记成:
Kafka 负责传,Spark/Flink 负责算,HDFS/对象存储负责存,Hive/Iceberg 负责组织,ClickHouse/HBase 负责不同场景的数据查询。
二、MapReduce:传统分布式批处理
MapReduce 是 Hadoop 时代经典的分布式计算模型。
核心思想:
text
大量数据
↓
Map
拆分、处理
↓
Shuffle
重新分发数据
↓
Reduce
聚合、汇总
↓
最终结果
例如统计海量日志中每个城市的访问次数,可以把数据分给多台机器处理,最后汇总结果。
MapReduce 主要面向批处理:
text
准备好一批数据
↓
启动 Job
↓
分布式计算
↓
输出结果
↓
任务结束
由于任务调度、中间结果落盘、Shuffle 等开销较大,复杂任务效率相对较低。
目前新项目直接编写 MapReduce 程序已经比较少,但其 Map、Shuffle、Reduce、分区、数据倾斜等思想仍然非常重要。
三、Spark:现代分布式计算引擎
Spark 是目前主流的分布式大数据计算引擎之一。
相比传统 MapReduce,Spark 使用更加灵活的 DAG(Directed Acyclic Graph,有向无环图)计算模型,并尽可能减少不必要的中间数据落盘。
DAG 可以理解为:将一个完整的数据处理任务拆分成多个计算步骤,并按照数据依赖关系组织成一张有向无环图。
例如:
text
读取数据
↓
过滤
↓
JOIN
↓
聚合
↓
排序
↓
输出
其中:
- 有向:数据处理具有明确的先后方向;
- 无环:计算流程不能出现循环依赖;
- 图:多个计算步骤通过依赖关系连接起来。
Spark 会先根据代码生成 DAG,再根据 DAG 分析整个计算流程,将可以连续执行的操作进行优化和组合,最后划分为多个 Stage 和 Task,分发到集群中执行。
例如:
text
读取数据 → 过滤 → 映射 → 聚合 → 输出
Spark 不一定在每一步都将中间结果写入磁盘,而是会尽量在内存中完成连续计算,从而减少磁盘 I/O,提高执行效率。
与 MapReduce 相比,MapReduce 通常将计算过程固定为 Map、Shuffle、Reduce 等阶段,复杂任务往往需要拆分成多个 Job,并在 Job 之间保存中间结果;而 Spark 可以通过 DAG 统一规划多个计算步骤,因此更适合执行复杂的数据处理流程。
例如:
text
读取数据
↓
过滤
↓
JOIN
↓
聚合
↓
排序
↓
输出
Spark 可以统一规划整个计算流程,因此特别适合:
- 大规模 ETL
- 离线数据处理
- Spark SQL
- 数据分析
- 机器学习数据处理
可以简单记忆:
Spark = 大规模数据的通用分布式计算引擎,批处理尤其常见。
Spark 也支持 Structured Streaming 等流式处理能力,所以"Spark = 只能批处理"并不准确。
四、Flink:实时流式计算
Flink 同样是分布式计算引擎,但它非常擅长实时流式计算。
传统批处理更接近:
text
████████ 一批数据
↓
处理
↓
结果
而流处理:
text
数据1 → 处理 → 结果
数据2 → 处理 → 结果
数据3 → 处理 → 结果
数据4 → 处理 → 结果
...
Flink Job 通常长期运行:
text
Kafka
│
│ 数据不断产生
↓
Flink Job
│
│ 持续计算
↓
实时结果
典型应用包括:
- 实时 GMV
- 实时 DAU
- 实时风控
- 实时推荐
- 实时用户画像
- 实时数据大屏
因此可以简单记忆:
Spark → 批处理/通用计算常见
Flink → 实时流式计算尤其常见
五、Kafka:数据传输
Kafka 是一个分布式消息系统/事件流平台。
在大数据架构中,它经常负责把源源不断产生的数据传递给下游系统。
例如:
text
用户下单
↓
订单系统
↓
Kafka
↓
Flink
↓
实时计算
Kafka 自己主要不是负责复杂的数据计算,而是负责:
让大量实时数据可靠地从生产者流向消费者。
所以经常看到:
text
业务系统 → Kafka → Flink
这也是实时数据处理非常经典的组合。
六、Hive:让大数据拥有"表"和 SQL
Hive 可以理解为一个大数据 SQL / 数据仓库体系。
它让 HDFS、对象存储中的大量数据,可以按照数据库表的形式组织。
例如底层:
text
/data/users/
001.parquet
002.parquet
003.parquet
Hive 可以将这些数据描述为:
text
user 表
id BIGINT
name STRING
age INT
于是可以:
sql
SELECT *
FROM user
WHERE age > 20;
Hive 表主要描述:
- 表名
- 字段
- 字段类型
- 分区
- 文件格式
- 数据存储位置
这些元数据通常由 Hive Metastore 管理。
因此:
Hive 表 = 给底层大数据文件定义表结构,让这些数据可以像数据库表一样被查询。
需要注意:
Hive 表的数据通常实际存储在 HDFS、S3、OSS 等底层存储中,并不是简单地"存进 Hive"。
七、HDFS:大数据存储
HDFS 是 Hadoop 的分布式文件系统。
核心作用:
把非常大的数据分散存储在多台机器上。
传统 Hadoop 架构经常是:
text
HDFS
↓
存储数据
MapReduce
↓
计算数据
Hive
↓
用表和 SQL 组织、查询数据
随着云计算发展,越来越多场景开始使用:
text
AWS S3
阿里云 OSS
其他对象存储
所以现代架构中经常出现:
text
对象存储
+
Parquet
+
Iceberg
+
Spark / Flink
八、HBase:海量数据随机读写
HBase 是一个分布式 NoSQL 数据库。
它特别适合:
根据 RowKey 从海量数据中快速查询某条或某几条数据,并支持随机读写。
例如:
text
user_id = 10001
↓
HBase
↓
用户画像
兴趣标签:数码
会员等级:VIP
最近商品:iPhone
典型特点:
- 海量数据
- RowKey 查询
- 随机读写
- 低延迟点查
所以可以记成:
HBase = 我已经知道"我要找谁",帮我快速找到它。
九、ClickHouse(CK):海量数据 OLAP 分析
ClickHouse 是一个列式 OLAP 分析型数据库。
它非常擅长:
sql
GROUP BY
SUM
COUNT
AVG
WHERE
例如有几十亿条订单,需要统计:
sql
SELECT
city,
COUNT(*) AS order_count,
SUM(amount)
FROM orders
GROUP BY city;
ClickHouse 可以快速扫描大量数据并进行聚合。
因此特别适合:
- BI 报表
- 数据大屏
- 日志分析
- 用户行为分析
- 实时数仓
- 大规模聚合查询
可以简单记成:
ClickHouse = 从海量数据中快速算出统计结果。
十、HBase 和 ClickHouse 的区别
两者都可以存储海量数据,但访问模式完全不同。
| 场景 | HBase | ClickHouse |
|---|---|---|
| 根据 user_id 查用户 | ★★★★★ | ★★ |
| RowKey 点查 | ★★★★★ | ★★ |
| 随机读写 | ★★★★★ | ★★ |
| GROUP BY | ★ | ★★★★★ |
| SUM / COUNT | ★ | ★★★★★ |
| BI 报表 | ★ | ★★★★★ |
| 大规模聚合分析 | ★★ | ★★★★★ |
最简单的判断方式:
text
我已经知道"我要找谁"
↓
HBase
我需要从大量数据中"算一个结果"
↓
ClickHouse
所以 CK 并不能简单替代 HBase。
十一、这些技术哪些还主流?
可以粗略分成:
| 技术 | 当前定位 | 学习建议 |
|---|---|---|
| Kafka | 🟢 主流 | 重点 |
| Spark | 🟢 主流 | 重点 |
| Flink | 🟢 主流 | 重点 |
| ClickHouse | 🟢 主流 | 重点 |
| Hive | 🟡 体系仍非常重要 | 掌握 |
| HDFS | 🟡 仍大量存在,云上逐渐对象存储化 | 理解 |
| HBase | 🟡 特定场景仍重要 | 按需 |
| MapReduce | 🔴 新项目直接开发减少 | 理解原理即可 |
其中尤其需要注意:
MapReduce 使用减少 ≠ MapReduce 思想没有用了。
Map、Shuffle、Reduce 等思想依然存在于现代分布式计算系统中。
十二、现代大数据技术的演进
可以粗略理解为:
text
早期 Hadoop 时代
HDFS
+
MapReduce
+
Hive
逐渐发展到:
text
现代大数据架构
Kafka
↓
┌──────┴──────┐
↓ ↓
Spark Flink
批/通用计算 实时计算
↓ ↓
└──────┬──────┘
↓
HDFS / S3 / OSS
↓
Hive / Iceberg
↓
ClickHouse / HBase 等
现代数据平台还出现了越来越重要的:
Data Lake(数据湖)
Lakehouse(湖仓一体)
Iceberg 等开放表格式
十三、最终记忆方式
不要死记大数据技术名称,而应该问:它到底解决哪个问题?
| 问题 | 常见技术 |
|---|---|
| 数据存在哪里? | HDFS / S3 / OSS |
| 实时数据怎么传? | Kafka |
| 大规模离线数据怎么算? | Spark |
| 实时数据怎么算? | Flink |
| 大数据怎么组织成表? | Hive / Iceberg |
| 海量数据怎么做 OLAP 分析? | ClickHouse |
| 海量数据怎么根据 Key 快速查询? | HBase |
| 传统分布式批处理是什么? | MapReduce |
最终可以压缩成一句:
Kafka 负责传,Spark/Flink 负责算,HDFS/对象存储负责存,Hive/Iceberg 负责组织,ClickHouse 负责 OLAP 分析,HBase 负责海量数据的 Key 点查和随机读写。
对于后端开发而言,现阶段重点理解 Kafka、Spark、Flink、Hive、ClickHouse 的定位即可;MapReduce 重点理解 Map、Shuffle、Reduce 等基本思想,不必把传统 MapReduce 编程作为学习重点。