小米数据湖架构演进:Iceberg、Paimon与 AI 场景下的实践
如果无法正常显示,请先停止浏览器的去广告插件。
1. 李培殿
2.
3. 目录
1. 小米数据湖架构及上云实践
2. 从离线湖仓到实时湖仓
3. 数据湖在AI场景实践
4. 未来规划
4.
5. 信息化 互联网
手机研产供
新零售
IOT设备 互联网广告
互联网应用
信息流推荐
汽车
智能座舱
自动驾驶
AI
基座大模型
小爱同学
6. 数据工场
平台
计算引擎
Flink
Spark
存储层
Doris
Ray
Gravitino
元数据
数据湖
Trino
Hive
Iceberg
HDFS
Paimon
Fileset
JuiceFS
7. 表数量
7W+
存储量
100PB+
集团
数仓标准
8. 成本
云上存储成本
相比IDC成本
更低
运维成本更低
容量
云上对象存储
无限容量
IDC机房扩容
周期长
性能
HDFS 慢节点
问题严重
HDFS 对小文
件不友好
9. 对象存储 JuiceFS(自建)
QPS 限制 同一个前缀存在 QPS 限制 前缀散列存储,避免 QPS 限制
读性能 一般 预读机制、分布式缓存提升读性能
调用费用 在可接受范围内 预读导致调用费用上涨,
但可通过缓存缓解
Bucket 带宽 大吞吐作业易打满带宽 分布式缓存可缓解带宽问题
租户隔离(审计与计费) 平台侧一般使用单个桶,
难以做租户隔离 自建 JuiceFS 集群
接入内部 IAM 体系做用户隔离
10. 温数据上云
热数据上云
存量分区 新增分区
自建HDFS 自建HDFS
Iceberg
Full Compaction
异步转储上云
云上对象存储
JuiceFS Cache
热数据上云
JuiceFS
存量分区 新增分区
自建HDFS 云上对象存储
云上对象存储
11. Ranger 鉴权服务
表鉴权
个人
凭证
认证鉴权
Gravitino
ak/sk
请求凭证
ak/sk
Secret
Management
12.
13. equality delete file
position delete file
datafile.parquet
id (PK) data file_path position id
1 a datafile.parque
t 1 2
1 b 2 c
merge
datafile.parquet
id (PK) data
1 a
• 并发更新场景下难以
保证主键唯一
• Overwrite 语义无法保
证主键唯一
• upsert 语义下生成太
多 equality delete 记
录,导致查询缓慢
14. equality delete file
position delete file
datafile.parquet
id (PK) data file_path position id
1 a datafile.parque
t 1 2
1 b 2 c
changelog
rowkin
d id data rowkin
d id data
-D 2 null +I 1 a
• changlog 不完整:如对于 -D
记录只有主键字段,当根据非
主键字段聚合操作时会导致数
据错误
• 只有 -D,+I 操作,无法正确的
反映出 -U,+U
• 无效的 equality delete:增多
时导致下发过多的 -D 操作导
致聚合错误
• 数据乱序:读取 data file 时分
片策略导致数据乱序
15. 把复杂留给自己,把简单留给用户
vs
复杂的聚合逻辑及调优由「用户」完成
聚合逻辑及调优由「Paimon」来完成
16. •
•
•
•
100GB
广告请求特征
100GB
广告计费数据
天级链路延迟
离线计算,失败后重试代价高
每次拼接 shuffle 数据量翻倍
激活数据延迟时需回溯理历史分区
200GB
中间数据
100GB
广告转化数据
300GB
样本数据
17. •
•
•
•
100GB
分钟级链路延迟
增量计算,重试代价小
无需 Join 拼接数据,由 Paimon 聚合
转化数据延迟时也可自动关联
广告请求特征
300GB
100GB
广告计费数据
100GB
广告转化数据
union
样本数据
18.
19. • 非表格数据的管理和治理
• 大模型训练数据预处理
• AI场景数据挖掘
20. 非表格数据的管理和治理
缺乏资产定义:非表格数据一般以文件方式存储,(文件归属、文件描述等)
生命周期治理困难:非表格数据目录不规范,难以做生命周期有效治理
审计困难:算法团队共享账号访问目录,导致审计困难
共享困难:目录方式难以进行权限管控和数据分享
21. 资产标识:
fileset_catalog.raw_data.common_crawl
虚拟访问目录:
gvfs://fileset/fileset_catalog/raw_data/common_crawl
实际存储目录:
jfs://volume/raw_data/common_crawl
gvfs://fileset/fileset_catalog/xxx
Fileset Catalog
22. Flink/Spark
资产管理
数据治理:生命周期管理等
统一认证和鉴权
屏蔽底层存储细节
无需入湖直接分析
Tensorflow/Pytorch/Pandas/Ray
Gravitino Fileset
Java GravitinoVirtualFilesystem Python GravitinoVirtualFilesystem
Hadoop Filesystem fsspec
HDFS
JuiceFS
OSS
23.
24. 网页抽取
数据过滤
URL 去重
• 网页抽取:抽取网页数据元数据
• 数据过滤:过滤低质量网页
• URL 去重:根据网页 URL 去重,去掉重复文档
• 文本相似度去重:根据文本的相似度,使用 minhash 算法去重
文本相似度去重
25. 1. 使用 pySpark 进行分布式抽取
2. 使用 gvfs 协议写入到 JuiceFS
3. JuiceFS 挂载到开发机提供本地实验
4. Fileset 管理数据集
原始数据(warc)
Fileset on JuiceFS
抽取数据
(parquet)
Fileset on JuiceFS
26. 1. datatrove 是 Hugging Face 开源的 Python 库,用
于大规模文本数据处理、过滤和去重。提供预置
函数,支持在本地和 Slurm 集群运行。
2. datatrove 的io 模块为 fsspec,和 fileset 很好结合
抽取数据
(parquet)
Fileset on JuiceFS
过滤数据
(parquet)
Fileset on JuiceFS
27. 1. 将 URL 作为主键,使用 Paimon 主键表直接去重
2. 设置 sequence.field 特性保留长度最长的文档
过滤数据
(parquet)
Fileset on JuiceFS
去重后数据
Paimon
28. •
•
•
Paimon
Spark
计算文档签名
长周期作业(20+h)拆分多阶段执行
优先使用 Table, 无需 list 和 rename 目录
根据场景选择,需要主键或聚合模型则使用 paimon
Iceberg
Spark
计算相似对
Iceberg
Spark连通图
计算相似文档
Iceberg
Spark
文档去重
JuiceFS
29. 背景:构建标签库,根据标签挖掘帧数据
需求:
• 根据唯一的帧 id 和 tag 进行查询
• 上千的标签列,且不定时增加
• 实时入湖
Talos
Flink
实时入湖
Iceberg
merge into
更新
Iceberg
schema
evolution
Talos
Flink
实时入湖
Paimon
主键表
aggration 模型
30. 文件
webdataset
Paimon
优点 • 存储方式简单,便于访问 • 文件打包存储,缓解元数据压力 • Parquet 格式存储
• 以 binary 方式存储,可进一步压
缩
• 随机访问性能好
• 图片及文本混合存储,便于检索
缺点 • 数据量大时元数据压力较大 • 随机访问性能差 •
•
webdataset
图片入湖
数据湖表存储
•
Schema evolution 时有存储放大
原始数据以 webdataset 方式进行存储,以
Fileset 进行管理
Schema evolution 方便扩展图片元数据信息,
如标签、图片描述
31.
32. 云原生
湖仓
元数据
统一
多模态
数据湖
33.
34. 大模型正在重新定义软件
Large Language Model Is Redefining The Software