B 站基于 Iceberg 的湖仓一体优化实践与智能化平台应用
在数据处理领域,湖仓一体架构正逐渐成为解决数据存储与计算难题的关键方案。B 站在这一领域进行了深入探索,基于 Iceberg 构建了高效的湖仓一体架构,并通过智能化管理平台 Magnus 进一步提升了数据处理效率,为企业的数据管理提供了新的思路和实践经验。
湖仓一体项目背景:解决传统架构痛点
B 站早期的数据服务架构基于 Hadoop 生态,包含 Elasticsearch、Kafka、TIDB、ClickHouse 等多种技术组件,形成了从数据源到数据产品的完整链条。然而,这种架构在实际运行中面临诸多挑战:
数据出仓繁琐且一致性难保障:数据在不同存储引擎间流转复杂,容易出现数据不一致的情况。
数据处理复杂且需定制化:面对多样化的业务需求,数据处理流程需要大量的定制化开发,增加了开发和维护成本。
需为不同存储引擎优化计算:多种存储引擎的存在,使得计算优化工作变得繁琐,难以统一管理和维护。
湖仓一体项目架构:融合灵活性与高性能
为解决上述问题,B 站在 Hadoop 生态上引入 Iceberg 组件,构建了全新的湖仓一体架构。该架构在保持数据湖灵活性的同时,打造了高性能的数据仓库体验,实现了数据采集、加工、出仓、分析和探索的全流程优化:
数据采集与加工:支持埋点数据、Kafka 数据、Mysql 数据、Log 数据等多种数据源,通过 Flink 和 Lancer 进行数据加工处理。
数据存储与管理:利用 Iceberg 作为核心存储引擎,结合 Hive 和 Alluxio,实现了数据的高效存储和管理。
数据分析与服务:通过 Trino、ClickHouse 等工具提供数据分析和数据服务能力,满足不同业务场景的需求。
湖仓一体项目优势:提升数据处理效率
该架构的实施带来了显著的优势:
避免数据重复存储:数据无需出仓,减少了数据在不同系统间的复制和存储,降低了存储成本。
支持快速查询:通过为大数据添加索引,实现了毫秒级 / 秒级的查询能力,满足了基本的取数场景需求。
缩短数据处理流程:数据处理更加高效,从数据处理到取数的过程大大缩短,提升了数据的时效性。
支持更多业务场景:支持数据增量 update 和事务,能够更好地对接各种业务场景。
业务场景落地:多领域应用成效显著
湖仓一体架构在 B 站的多个业务场景中得到了成功应用:
取数服务:为运营后台、数据产品(如万华镜、观星台、Boss 看板等)和 OLAP 多维分析等提供了高效的取数支持。
ABTest 实验平台:助力 ABTest 实验的设计、执行和分析,为产品优化提供了数据支持。
BI 报表:支持 BI 报表的生成和展示,帮助企业管理层做出更明智的决策。
标签人群圈选:实现了精准的标签人群圈选,为精准营销提供了有力支撑。
日志检索:提供了高效的日志检索能力,便于问题排查和系统监控。
基于 Iceberg 的内核优化:提升查询性能
数据组织排序优化
线性排序:基于一个或多个字段进行分区内线性全排序,适用于根据 up_id/avid 进行点查或范围查询的场景。通过 ALTER TABLE 语句可以设置排序规则,如ALTER TABLE catalog.schema.table WRITE DISTRIBUTED BY col1,col2 WITH RANGE LOCALLY ORDERED BY col1,col2。
Z-Order 排序:基于 2-4 个字段进行分区内 Z-Order 空间排序,适用于根据 up_id、avid、time 等多个字段进行点查或范围查询的场景。其原理是将多个待排序字段分别进行二进制编码,然后按 bit 位交错生成 Z-Value 值,使生成的 Z-Value 沿着特定空间轨迹有序。通过ALTER TABLE语句可以设置 Z-Order 排序,如ALTER TABLE catalog.schema.table WRITE DISTRIBUTED BY col1,col2,col3,col4 WITH ZORDER LOCALLY ORDERED BY col1。
二级索引支持
Bloomfilter 索引:具有很小的存储开销,支持任意普通类型字段的点查,适用于存在较多不同字段过滤且字段基数相对较高的场景。创建语句如CREATE INDEX col1_bf USING BLOOMFILTER ON catalog.schema.table (col1) WITH (fpp = 0.01)。
Bitmap 索引:支持多个字段的组合查询和范围查询,适用于单个字段或多个字段组合的点查或范围查询且字段基数不宜过高的场景。创建语句如CREATE INDEX col1_bm USING BITMAP ON catalog.schema.table (col1)。
BloomRF 索引:存储开销较小,支持字段的点查和范围查询,适用于高基数字段的点查和范围查询场景。创建语句如CREATE INDEX col1_brf USING BLOOMRE ON catalog.schema.table (col1)。
Tokenbf、ngrambf 索引:针对 String 类型数据进行检索,适用于日志场景中的关键字检索。创建语句如CREATE INDEX col1_tbf USING TOKENBF ON catalog.schema.table (col1)。
预计算与星型模型支持
星型模型:在 Join 场景下根据维表过滤字段组织数据,并实现谓词下推,提高查询效率。通过ALTER TABLE语句可以添加相关列和设置分布规则,如ALTER TABLE T1 ADD CORRELATED COLUMN (T2.f1,T2.f2) FROM(LEFT JOIN T2 ON T1.key1=T2.key2 WITH unique)和ALTER TABLE T1 WRITE DISTRIBUTED BY key1,f1,f2 WITH ZORDER。
预计算:解决聚合、多表关联场景下大量数据摄入和计算密集导致查询耗时的问题,支持 count、avg、max、min、sum 等多种聚合函数。还支持查询部分 cube 文件和数据文件,创建预计算索引的语句如CREATE AGG INDEX cube1 on T1 WITH DIMENSIONS (T2.f1,T2.f2) WITH AGGREGATIONS (sum(T1.f3))。
优化效果显著
通过这些内核优化措施,B 站在 SSB 1000 大宽表模式下取得了显著的优化效果:查询时间提升了 1-10 倍,读文件数量减少了 2-400 倍。在 1TB 数据的 SSB 查询中,相比 Base 模式,关联列索引和预计算也带来了几倍到几十倍的性能提升。
智能化管理平台 Magnus:降低使用门槛
平台背景与目标
Iceberg 仅提供了数据与元数据的读、写 API 实现,缺乏统一的数据和元数据操作管理服务。同时,用户习惯使用 Hive 表,希望减少使用 Iceberg 表的成本,使其使用起来像普通 Hive 表一样。此外,用户不确定常用查询 Pattern 的定义是否合理,且查询模式随时间变化,数据组织和索引的触发也需要智能化管理。Magnus 平台的目标就是解决这些问题,助力查询加速,降低用户使用湖仓的门槛。
平台架构
Magnus 平台的架构集成了多个组件,包括 Spark ETL Job、Flink ETL Job、API ETL Job 等,实现了对 Iceberg 元数据的管理、索引的构建、Cube 的重写等功能。
平台实践
Iceberg 元数据管理平台:提供了对 Iceberg 表的 Schema、Snapshot、Partition 等信息的管理和查询功能。
智能化数据组织优化:实现了对 Table 的优化详情视图展示,包括 Partition、Distribution、Sort、Index 等详细信息。
智能查询分析与优化模式推荐:通过分析 SQL 语句、过滤条件、查询耗时等信息,为用户推荐合适的 Sort、Distribution 和 Indices 方案。例如,根据查询统计,推荐 like_rank、avid 等作为排序字段,avid、up_id、like_rank 等作为分布字段,并推荐相应的索引类型。
平台核心价值
Magnus 平台的核心价值在于助力查询加速和降低用户使用湖仓的门槛,使 Iceberg 的使用更加便捷和高效。
未来规划:持续提升数据管理能力
B 站在湖仓一体和智能化管理平台方面还有进一步的规划:
预计算支持 Star Tree:进一步优化预计算能力,支持更复杂的数据分析场景。
历史分析推荐智能化:实现历史分析推荐的智能化,为用户提供更精准的优化建议。
CDC 数据落地支持:支持 CDC(Change Data Capture)数据的落地,实现数据的实时更新和同步。
B 站基于 Iceberg 的湖仓一体优化实践和智能化管理平台 Magnus 的应用,为企业的数据管理提供了宝贵的经验。通过不断优化架构和引入智能化管理,B 站在数据处理效率和用户体验方面取得了显著提升,也为行业的发展提供了新的方向。
浙公网安备 33010602011771号