1) 【一句话结论】针对PB级历史数据AI训练场景,采用分层架构(数据湖+数据仓库+数据管道),通过冷热数据分离(热数据存HDFS,冷数据存S3)、分布式计算(Spark/Flink)和模型并行/数据并行训练,结合实时管道(Flink)支持毫秒级延迟推理,平衡存储成本与AI训练效率。
2) 【原理/概念讲解】老师会解释三个核心组件及选型逻辑:
- 数据湖(Data Lake):存储原始/半结构化PB级数据(如日志、行为流),支持多格式(JSON/Parquet/CSV)。采用HDFS(高I/O性能,适合热数据,如近7天日志)+ S3(低成本,适合冷数据,如历史日志)架构,通过冷热分离控制成本。类比:数据湖是“原始仓库”,存放所有货物,冷热分离像仓库里热销商品放在货架(HDFS),冷销商品放在储藏室(S3)。
- 数据仓库(Data Warehouse):面向分析的集成结构化数据集合(如星型模式),存储清洗后的数据,支持OLAP查询(如用户行为分析报表)。依赖Hive Metastore管理元数据,确保数据一致性和查询效率。类比:数据仓库是“整理好的货架”,商品按类别(维度表)和销售记录(事实表)分类,方便顾客(业务人员)快速找到所需商品。
- 数据管道(Data Pipeline):自动化数据流转流程,包含采集(Kafka)、转换(Flink/Spark Streaming)、加载(ELT)环节。支持实时(Flink)与批量(Spark)处理,确保数据从源到湖/仓库的流动。类比:数据管道是“物流车”,负责把仓库(源系统)的货物(数据)运到数据湖(存储)或数据仓库(分析)。
3) 【对比与适用场景】
| 架构组件 | 定义 | 特性 | 使用场景 | 注意点 |
|---|
| 数据湖 | 存储原始/半结构化PB级数据的集中式存储 | 原始数据,多格式,可扩展 | PB级原始数据存储(如日志、用户行为) | 需冷热分离、数据治理、压缩 |
| 数据仓库 | 面向分析的集成结构化数据集合 | 结构化,主题化,OLAP | 业务分析、报表、BI | 需元数据管理、数据一致性 |
| 数据管道 | 数据采集、转换、加载的自动化流程 | 实时/批量处理,可扩展 | 数据从源到湖/仓库的流动 | 需容错、监控、状态管理 |
4) 【示例】:假设用户行为数据(PB级)来自日志、APP、网站,设计如下:
- 数据湖存储:HDFS(热数据,如近7天日志,按主题分片:用户行为、日志,Parquet格式,Snappy压缩)+ S3(冷数据,如历史日志,按时间分片:按年/月,对象存储,低成本)。存储原始JSON日志和结构化Parquet行为数据。
- 数据管道:Kafka(采集原始日志,如用户点击、购买事件)→ Flink(实时清洗:过滤无效数据,提取用户ID、行为时间、物品ID,写入数据湖HDFS,使用Flink的检查点机制保证容错)→ 批量ETL(每天凌晨):Spark读取数据湖数据,加载到数据仓库(星型模式,事实表:行为事实,维度表:用户、时间、设备,按月分区)。
- AI训练:使用Spark MLlib(数据并行,参数服务器模式),从数据仓库读取分区数据,训练推荐模型(如协同过滤),训练完成后部署到K8s,通过API提供实时推理(如用户访问时,调用模型预测推荐内容,延迟<100ms,验证方法:压力测试,记录请求响应时间)。
- 伪代码(Flink实时处理,检查点与状态管理):
from flink import Flink
from flink.table import *
# 实时清洗日志并写入数据湖(带检查点)
stream = table_env.from_path("kafka://topic:user_behavior")
cleaned = stream.filter("action != 'invalid'").select("user_id, action_time, item_id")
cleaned.to_path("hdfs://path/to/data_lake/user_behavior", checkpoint_path="hdfs://path/to/checkpoints")
5) 【面试口播版答案】:“面试官您好,针对PB级历史数据用于AI训练的场景,我设计的架构是分层架构:首先以数据湖为核心存储原始数据,采用HDFS(热数据,如近7天日志)+ S3(冷数据,如历史日志),通过冷热分离控制存储成本;然后通过数据管道(Kafka+ Flink)实现实时采集、清洗和加载,支持毫秒级延迟;接着构建数据仓库(星型模式),存储结构化数据用于业务分析;AI训练方面,采用Spark MLlib的分布式训练,利用集群资源加速PB级数据训练,模型训练完成后部署到K8s,通过API提供低延迟推理(延迟<100ms),满足实时推荐需求。这样分层处理既控制了PB级数据的存储成本,又支持了高效AI训练和实时推理。”
6) 【追问清单】:
- 数据湖的PB级存储成本控制? 回答要点:冷热数据分离(热数据HDFS,冷数据S3,S3成本低于HDFS约70%)、Parquet压缩(Snappy压缩比降低30%存储空间)、存储介质优化(HDFS本地磁盘 vs S3对象存储,成本差异)。
- 数据管道的实时性处理? 回答要点:对于实时AI训练(如实时推荐),使用Flink处理实时数据,通过状态后端(如RocksDB)和低延迟算子(如窗口算子),延迟控制在100ms以内,写入数据湖后,实时ETL到数据仓库,支持毫秒级延迟。
- AI模型的分布式训练策略? 回答要点:使用Spark MLlib的数据并行(参数服务器模式),将模型参数分片存储在多个节点,加速PB级数据训练,减少单机训练时间(如从几天缩短到几小时)。
- 数据湖的PB级数据分片与索引? 回答要点:数据湖按主题分片(用户行为、日志),每个分片存储为Parquet文件,文件内按列索引(如用户ID列),提高查询效率;数据仓库按时间分区(按月),每个分区存储为Hive表,支持按时间范围查询。
7) 【常见坑/雷区】:
- 混淆数据湖与数据仓库功能,只提存储不提处理,导致架构不完整。
- 数据管道忽略实时处理技术选型(如只说Spark Streaming,未提及Flink的低延迟优势),无法满足实时AI训练需求。
- 忽略PB级数据的压缩、分片、索引优化,导致存储和查询效率低(如未用Parquet压缩,未按主题分片)。
- 未考虑数据管道的容错机制(如未提Flink检查点),导致数据丢失风险。
- 缺少模型服务化部署方案(如未提K8s部署),无法支持AI推理的实际应用。