云原生大数据
概述
云原生重塑了大数据架构:对象存储替代 HDFS、K8s 承载计算、存算分离成为主流。本文讲透云原生大数据的三大主题:对象存储、K8s 计算、存算分离,以及实践要点。
一、云原生大数据概览
1.1 什么是云原生大数据
云原生大数据:
计算:Kubernetes 弹性调度
存储:对象存储(S3/OSS/GCS)
架构:存算分离
交付:容器化/弹性伸缩
核心变化:
从"买机器搭集群"到"按需申请资源"1.2 与传统集群对比
| 维度 | 传统集群 | 云原生 |
|---|---|---|
| 存储 | HDFS | 对象存储 |
| 计算 | YARN/Standalone | Kubernetes |
| 扩缩 | 手动/慢 | 自动/快 |
| 成本 | 预留 | 按需 |
| 运维 | 重 | 轻(托管) |
收益:
弹性(波峰扩容波谷缩容)
成本(按使用付费)
运维(托管/容器化)二、对象存储上的大数据
2.1 对象存储 vs HDFS
| 维度 | HDFS | 对象存储 |
|---|---|---|
| 接口 | 文件系统 | 对象 API |
| 扩容 | 手动加节点 | 无限 |
| 成本 | 高(副本) | 低 |
| 一致性 | 强 | 最终一致 |
| 延迟 | 低 | 相对高 |
对象存储优势:
无限容量
廉价(多副本由云管)
生命周期管理(冷热)
与湖仓天然契合2.2 对象存储上的挑战
| 挑战 | 说明 |
|---|---|
| 一致性 | 最终一致影响读写 |
| 小文件 | 大量小文件性能差 |
| 目录重命名 | 代价高 |
| 数据本地性 | 无本地性可言 |
解决思路:
表格式(Iceberg/Delta)弥补一致性
合并小文件(compaction)
避免频繁重命名(分区目录设计)
计算引擎对接优化(数据源优化器)2.3 引擎对接
对接方式:
Spark:s3a:// 协议直接读
Flink:对象存储文件系统
Hive:外部表指向对象存储
Presto/Trino:原生支持
关键:
文件格式(Parquet/ORC)
分区布局
谓词下推(减少对象请求)三、Kubernetes 上的计算
3.1 Spark on Kubernetes
Spark on K8s:
模式:
Client:driver 在外部
Cluster:driver 在 Pod
资源:
Executor 按 Pod 申请
动态分配(缩容释放)
优势:
弹性扩缩
资源隔离
共享集群(多团队)3.2 Flink on Kubernetes
Flink on K8s:
部署模式:
Standalone on K8s
Native K8s(JobManager/TaskManager Pod)
Flink Kubernetes Operator
特性:
TaskManager 动态扩缩
故障自动重启
Checkpoint 存储对象存储3.3 K8s 计算的要点
| 要点 | 说明 |
|---|---|
| 调度 | 抢占/优先级/队列 |
| 隔离 | Namespace/资源配额 |
| 弹性 | HPA/动态伸缩 |
| 存储 | PVC/CSI |
| 监控 | K8s 指标 + 应用指标 |
实践注意:
大任务容器规格设计
资源配额防止抢资源
节点池分离(CPU/GPU/内存型)
镜像版本管理四、存算分离架构
4.1 什么是存算分离
存算分离:
存储(对象存储)与计算(集群)独立
计算集群:
无状态(不存数据)
按需启停/伸缩
数据随时可算
对比存算一体:
一体:数据跟着节点走(HDFS)
分离:数据在远端,计算临时申请4.2 存算分离的优势
| 优势 | 说明 |
|---|---|
| 弹性 | 计算独立扩缩 |
| 成本 | 计算用完即释放 |
| 共享 | 多计算共享一份数据 |
| 演进 | 引擎可替换 |
多引擎共享:
一份对象存储数据
Spark 批处理
Flink 实时
Presto 即席
互不影响4.3 存算分离的挑战
| 挑战 | 说明 |
|---|---|
| 网络 | 数据拉取开销 |
| 延迟 | 远端存储延迟 |
| 缓存 | 需要本地缓存层 |
| 数据本地性 | 失效 |
缓解:
本地缓存(Alluxio/引擎内缓存)
列式裁剪(少读数据)
谓词下推
热点数据预热五、云原生湖仓实践
5.1 整体架构
云原生湖仓:
存储:对象存储(S3/OSS)
表格式:Iceberg/Delta/Hudi
计算:K8s 上的 Spark/Flink/Presto
调度:Airflow/DolphinScheduler(云上)
治理:元数据/权限(Ranger)
数据流:
采集 → 对象存储原始区
→ 批/流处理 → 湖表
→ 分析引擎查询5.2 落地步骤
步骤:
1. 数据迁移对象存储
2. 表格式建设(ACID)
3. 计算迁 K8s(弹性)
4. 流批一体
5. 权限与治理
6. 成本优化(冷热分层)5.3 成本优化
优化手段:
冷热分层(低频转冷存储)
计算弹性(波峰扩容)
压缩/列式(减少存储)
生命周期(过期清理)
竞价实例(低优先级任务)六、常见问题
6.1 对象存储小文件问题
原因:
实时写入产生大量小文件
影响:
元数据压力、查询慢
解决:
合并(compaction)
写缓冲(攒批再写)
表格式自动合并6.2 K8s 上任务不稳定
排查:
资源不足/抢占
镜像拉取慢
节点故障
网络(对象存储访问)
处理:
合理规格与配额
镜像缓存
重试机制6.3 存算分离性能下降
对比 HDFS:
远端读取开销
优化:
缓存层
裁剪/下推
合适文件大小
并行读取七、小结
云原生大数据的核心是存算分离 + 弹性计算:对象存储解决存储的无限与廉价,K8s 解决计算的弹性与共享,表格式解决湖上数据的治理与实时。落地关键是处理好对象存储的性能问题(缓存、小文件、下推),让弹性与成本优势真正兑现。