Spark 大数据排障时怎样留下有效证据排查 Spark 作业时总耗时只是入口不能直接说明瓶颈在哪。先把运行编号、输入分区、代码版本、资源配置和输出位置对应起来才能判断问题来自数据倾斜、上游迟到还是执行参数不合适。失败记录要能串联驱动日志记录作业提交和关键配置执行器日志用于查看具体阶段任务系统保留重试与依赖状态。三类记录使用同一个运行编号关联但避免把原始业务字段完整写进日志尤其是可能包含个人信息的列。从阶段而非总时间开始看先找耗时异常的阶段查看任务数量、数据读写和是否有少数分区明显拖后。再对照输入分区大小与连接方式。若是某次补数引入大量历史数据处理策略和普通日常任务就不应相同。给人工接手留入口任务失败页面应显示可用的诊断链接、已执行的重试次数和下一步可操作项。自动重试不能覆盖所有情况遇到数据质量问题时明确暂停和通知比盲目重跑更合适。def handle(request: dict) - dict: if not request.get(request_id): return {status: rejected, reason: 缺少请求标识} if request.get(dry_run): return {status: preview, reason: 仅生成待确认结果} return {status: queued, reason: 进入受控处理}小结有效证据不是日志越多越好而是能把一次异常还原为输入、阶段、配置和处理决定让下一位排查者接得上。排障开始前先固定现场Spark 作业失败或变慢后先保存运行编号、提交时间、应用版本、输入范围、资源配置和输出路径。它们构成一次运行的上下文。只有错误堆栈而没有输入范围很难判断是代码问题还是某批补数改变了数据规模只有总耗时也看不出异常落在哪个阶段。记录时要控制内容边界。运行编号、分区数、文件数量和阶段摘要可以留在日志中原始业务字段、完整查询条件和敏感样本不应直接复制。需要查看问题记录时使用受控的诊断链接或脱敏抽样既保留证据也避免日志成为新的数据泄露点。从异常阶段向下看总耗时升高先找比平时更慢的阶段再看其中任务时长是否集中在少数分区。若只有几个任务拖后可能是数据倾斜或特定文件异常若所有任务都变慢再检查集群资源、远端存储和上游读取。把问题直接归咎于“Spark 慢”没有帮助阶段级证据才支持下一步动作。遇到反复重试的任务要同时看失败原因和重试后的输入状态。网络抖动、执行器丢失与坏数据的处理方式不同。对于明显的数据质量错误继续重试只会占用资源及时暂停、标记受影响范围并通知数据生产方通常比等待系统耗尽次数更合适。让接手的人能继续查失败页面应把运行编号、关键阶段、重试次数、最近错误摘要和诊断入口放在一起并注明是否已经执行过自动操作。人工接手后可以选择重跑、跳过、缩小输入或转交上游而不是从多套系统里重新拼时间线。问题修复后使用相近输入再跑一次确认输出位置和记录数符合预期。复盘只需要补充这次新增的检查项或告警条件别把整段日志复制进文档真正有用的是下一次能更快定位。给常见故障准备分流规则可以把磁盘空间不足、凭证失效、上游文件迟到和分区倾斜等高频问题分别指向对应的检查入口。分流规则不替代人工判断但能减少每次从零开始搜索。规则命中后仍要展示本次运行的证据和可选动作防止自动化把不同故障误归为同一类。