场景目标
理解 Iceberg 快照引用链与 Spark 提交,核对写入幂等、小文件维护、历史保留和清理恢复边界。 保存固定输入、前后状态和业务核验结果,交接未知范围与恢复责任。
大数据运维 · 高级
理解 Iceberg 快照引用链与 Spark 提交,核对写入幂等、小文件维护、历史保留和清理恢复边界。
理解 Iceberg 快照引用链与 Spark 提交,核对写入幂等、小文件维护、历史保留和清理恢复边界。 保存固定输入、前后状态和业务核验结果,交接未知范围与恢复责任。
准备匹配的 Iceberg Spark 运行时、已配置 catalog 和 SQL 扩展;记录表身份、format-version、当前 snapshot 与存储前缀。所有修改及 orphan 预览仅使用独立测试表:最多一千行、二十个数据文件、二十个快照,目录不与生产共享。
理解 Iceberg 快照引用链与 Spark 提交,核对写入幂等、小文件维护、历史保留和清理恢复边界。
点击组件,在图下方查看职责;连线编号对应流向解读。小屏可横向滚动,或直接展开文字说明。
读写使用同一受支持 catalog,避免共享目录的独立并发注册。
提交原子性及指针实现按 catalog 验证,图不限定具体数据库。
当前或指定历史快照指向其 manifest list。
使用清单定位 manifests,非按目录修改时间选择。
数据与删除文件共同解释当前可见记录。
文件先落盘不代表表提交完成,最终可见性由提交决定。
同一匹配运行时执行维护,不把 CALL 受理视为成功。
重写后更新表状态,需要核对前后 snapshot 及并发提交。
示例只在隔离表重写和 dry_run 预览,生产删除不由此图授权。
采用 Iceberg 1.8.1、Spark 3.5 和 format v2 表。运行时包、Scala 二进制版本、SQL 扩展与 catalog 必须匹配;catalog 的原子提交和权限实现按实际插件核对。
不直接编辑 metadata、manifest 或删除被引用文件;快照不是独立备份,任务超时不代表未提交。生产清理、快照回滚和新写入后的恢复需单独确定范围,本文不执行这些操作。
图解是本站基于官方资料整理的逻辑参考;实施前仍需核对实际部署版本、组件支持范围与变更审批。
采用 Iceberg 1.8.1、Spark 3.5 和 format v2 表。运行时包、Scala 二进制版本、SQL 扩展与 catalog 必须匹配;catalog 的原子提交和权限实现按实际插件核对。
不直接编辑 metadata、manifest 或删除被引用文件;快照不是独立备份,任务超时不代表未提交。生产清理、快照回滚和新写入后的恢复需单独确定范围,本文不执行这些操作。
核验实际身份、固定输入与业务结果,记录操作前后状态和剩余风险。所有示例仅为待环境验证资料,未运行,预计时间覆盖首轮诊断与有限试点。
分别记录 Spark、Iceberg、Scala 与表 format 版本,核对 SQL 扩展及 catalog 配置。查看已知测试表定义,不从存储目录名称推断表身份。
SHOW CREATE TABLE REPLACE_WITH_CATALOG.REPLACE_WITH_DB.REPLACE_WITH_TEST_TABLE;包与引擎匹配,catalog、表及独立测试前缀可对应,修改范围满足样本限制。
运行时或 catalog 不明时暂停写入,不将同目录在不同 catalog 中独立注册后并行写。
在最多二十个快照的测试表读取有限结果;LIMIT 限制返回量,排序仍可遍历该表历史元数据。snapshot ID 不按大小表示新旧。
SELECT committed_at, snapshot_id, parent_id, operation
FROM REPLACE_WITH_CATALOG.REPLACE_WITH_DB.REPLACE_WITH_TEST_TABLE.snapshots
ORDER BY committed_at DESC LIMIT 10;
SELECT made_current_at, snapshot_id, is_current_ancestor
FROM REPLACE_WITH_CATALOG.REPLACE_WITH_DB.REPLACE_WITH_TEST_TABLE.history
ORDER BY made_current_at DESC LIMIT 10;当前快照、祖先关系与写入批次有解释,保留来源与时间窗。
快照关系不明确时不回滚,不按最大 snapshot ID 或目录修改时间选择恢复点。
关联写入应用、批次业务键、提交结果和新 snapshot。区分文件已落盘、提交受理与表状态更新;append 不保证按业务键去重,超时也不证明失败。
前次提交成功、失败或未知三种情况明确,重复与缺失可按批次核对。
结果未知时停止重复 append,先读取快照与目标记录,不能通过重试制造重复输出。
查看测试表 files、manifests 及代表性扫描计划,比较文件大小、记录数、分区规范与 Spark Task。data file 记录数不能不考虑删除语义就当作净可见行数。
可区分小文件读取成本和 manifest 规划成本,优化目标绑定实际证据。
若底层文件缺失则暂停维护,保留引用链,不能删除元数据让查询表面恢复。
以下仅对独立测试表的整数日期键 event_day 选取可能匹配的文件;where 是文件候选过滤,不只重写匹配行。
CALL REPLACE_WITH_CATALOG.system.rewrite_data_files(
table => 'REPLACE_WITH_DB.REPLACE_WITH_TEST_TABLE',
where => 'event_day = 20260101',
options => map('min-input-files', '2',
'max-concurrent-file-group-rewrites', '1',
'partial-progress.enabled', 'false')
);保存前后 snapshot、文件计数与业务对账,解释无候选或部分失败结果。
失败先核对实际提交,不直接指向旧 metadata JSON;已有并发新写入时单独评审恢复。
记录长读者、流消费者、分支标签与备份保留;只在已知小表预览 orphan。日期是需按最长写入窗口复核的演练截止点,dry_run 不消除枚举成本。
CALL REPLACE_WITH_CATALOG.system.remove_orphan_files(
table => 'REPLACE_WITH_DB.REPLACE_WITH_TEST_TABLE',
older_than => TIMESTAMP '2025-12-01 00:00:00',
dry_run => true
);候选路径、比较时间与引用来源可追踪,尚未删除任何文件。
发现共享前缀、scheme/authority 差异或在途写入时停止清理,不缩短时间窗绕过等待。
用已确认的真实 snapshot ID 在固定小样本做时间旅行,检查事件、重复、NULL 与业务汇总。元数据查询成功不证明数据文件或删除文件均可读。
重写前后语义一致,目标历史快照仍可访问,性能与资源对照完整。
样本不符则停止推广;快照已过期或文件已删除时转入独立备份恢复,不能承诺简单回滚。
保存 catalog 与表身份、运行时修订、前后 snapshot、候选报告、保留评审及业务验收。恢复流程明确当前视图与后续新写入归属,维护周期由实测增长制定。
接班人员可还原提交与维护范围,清理和独立备份分别验收,所有未验证项保持可追踪。
新提交已产生时禁止整体回到旧视图丢弃增量;取消 Spark 作业不撤销已提交的表变化。