文档开篇明确:构建是Foundry中计算数据集新版本的核心机制。 你可以把它理解为数据流水线的执行器:你在Pipeline Builder里画的可视化流水线、在Code Repositories里写的Python/SQL代码,都只是「逻辑定义」,只有运行构建,系统才会真正启动计算任务,把逻辑变成实际的数据集,完成数据的加工、更新与落地。
它负责协调整个计算过程,严格保证三件事:
Every 5 minutes调度配置。
构建不是一个单一的任务,而是由多个作业(Job) 组成的,作业是Foundry中最小的计算执行单元,所有数据操作最终都会被封装为作业。
作业封装了「根据一组输入数据集,计算一个或多个输出数据集新版本」的完整过程,是构建的最小执行单元。
JobSpec是作业的「执行说明书」,它完整定义了作业的运行规则,包含两个核心部分:
InputSpecs集合的形式,明确作业要读取的输入数据集,以及要读取的数据集视图、数据子集;当你修改了数据变换逻辑(比如在Code Repositories提交代码、在Pipeline Builder保存修改),系统会自动发布一个新版本的JobSpec到对应的分支。这和你之前学习的「分支构建」完全联动:不同分支的JobSpec相互隔离,构建运行时只会读取当前分支的JobSpec。
文档明确,Foundry中几乎所有数据操作都会被封装为作业,通过构建执行:
文档定义了作业的8种固定状态,这是你监控构建、排查故障的核心依据,作业只会在这些状态之间流转,整个构建的最终状态由所有作业的状态共同决定。
状态 | 核心含义 | 流转场景 |
|---|---|---|
WAITING(等待中) | 作业的初始状态,正在等待上游依赖作业完成,尚未被调度 | 流水线存在上下游依赖,上游作业未完成时,下游作业处于该状态 |
RUN_PENDING(待运行) | 作业已满足运行条件,正在等待执行环境(Spark集群)分配资源,尚未正式启动 | 上游依赖已完成,集群资源暂未到位 |
RUNNING(运行中) | 作业已被调度,正在执行计算逻辑 | 对应你截图1、2中Status: Running的构建,内部作业正在运行 |
ABORT_PENDING(待中止) | 已发起中止请求,但执行环境尚未确认中止完成 | 用户点击Cancel build、上游作业失败触发中止时 |
ABORTED(已中止) | 作业已被中止,原因是用户手动取消,或上游依赖作业失败 | 手动中止构建、上游作业失败触发级联中止 |
FAILED(已失败) | 作业已执行,但计算过程出错,未成功生成输出数据集 | 代码逻辑错误、数据格式不匹配、资源不足等导致作业崩溃 |
COMPLETED(已完成) | 作业执行成功,顺利生成输出数据集的新版本 | 作业无错误运行完成,输出数据已提交到数据集 |
文档把构建的运行过程分为两大核心阶段:构建解析(Build Resolution) 和 作业执行(Job Execution),同时定义了「陈旧性判断」这个核心优化机制,这是构建兼顾数据一致性与执行效率的核心。
这是构建运行的前置校验阶段,在正式启动计算之前,系统会完成一系列校验、准备工作,从根源上避免脏数据、循环依赖、并发写入冲突等问题。文档明确了5个核心步骤:
系统会自动判断:自上次构建该输出数据集以来,输入数据集是否发生变化、JobSpec中的变换逻辑是否发生变化。
强制构建(Force Build):如果你需要覆盖这个默认行为,强制重新计算所有数据集(比如修改了底层UDF函数,但JobSpec没有变化),可以运行强制构建,无论数据集是否最新,都会全量重新计算。
这是一个非常经典的依赖传递场景,我用你给的 A→B→C→D→E→F 流水线例子,结合 Foundry 陈旧性判断的核心逻辑,给你一步步讲清楚原因:
对于流水线中的每一个单独的作业,系统都会独立做两次判断,只有当两者都没变化时,才会跳过重新计算:
输入数据集是否变化:自上次构建以来,该作业的直接输入数据集是否生成了新版本(有新的事务提交);
自身 JobSpec 是否变化:自上次构建以来,该作业自身的变换逻辑(代码/流水线配置)是否被修改。
只要其中任意一个发生了变化,该作业就会被判定为「不是最新的」,必须重新计算。
我们假设流水线是严格的线性依赖:A → B → C → D → E → F(即 C 依赖 B 的输出,D 依赖 C 的输出,以此类推),且只有 B 的逻辑被修改了。
1. 作业 B:必须重新计算
判断 1(自身 JobSpec):你修改了 B 的逻辑 → 变化了;
结论:B 被判定为「不是最新的」,必须重新计算。
结果:B 运行完成后,会生成一个新版本的 B 输出数据集(提交了一个新的事务)。
2. 作业 C:必须重新计算
判断 1(输入数据集):C 的直接输入是「B 的输出数据集」。刚才 B 重新计算了,生成了新版本 → 输入变化了;
判断 2(自身 JobSpec):虽然你没改 C 的逻辑,但因为输入变了,只要有一个维度变化就必须重算;
结论:C 被判定为「不是最新的」,必须重新计算。
结果:C 运行完成后,生成新版本的 C 输出数据集。
3. 作业 D、E、F:以此类推,全部必须重新计算
D 的输入是 C 的输出 → C 变了 → D 必须重算 → D 生成新版本;
E 的输入是 D 的输出 → D 变了 → E 必须重算 → E 生成新版本;
F 的输入是 E 的输出 → E 变了 → F 必须重算。
在你的例子中,只有 A 会被跳过(因为 A 的输入和逻辑都没变),B、C、D、E、F 都会被重新计算。
这是 Foundry 保证数据一致性的核心设计:只要上游的输入数据变了,下游所有依赖它的作业都必须重新计算,确保最终结果是基于最新数据生成的。
这就好比工厂的生产线:
A 是原材料供应商,没变化;
B 是第一道工序,你改了工序参数(修改了逻辑),所以 B 要重新生产;
构建解析通过后,正式进入作业执行阶段,文档明确了核心执行规则:
A→B、A→C,B和C没有依赖关系,就会同时启动运行。A→B→C,A成功完成,B运行失败,A的输出数据集已经更新,不会回滚。COMPLETED状态,整个构建被标记为「已完成」,所有输出数据集的事务都会被正式提交,新的数据集版本对下游可见。和你之前学习的分支体系完全联动:整个构建的所有操作,都只会在你指定的构建分支上生效,绝对不会修改其他分支的数据集,从执行层保障了开发测试与生产环境的完全隔离。
这部分内容与你提供的截图2、3完全对应,是你监控作业进度、排查构建故障的核心能力。
实时日志会流式展示正在运行的作业的实时日志,让你可以实时监控作业进度、排查长时间运行的任务(比如流处理任务、大计算量的离线任务)。
View live按钮,在构建应用的日志查看器右上角,点击即可启动实时日志流;Download logs按钮,可下载完整日志文件用于离线排查、归档;Filter logs搜索框可通过关键词快速定位目标日志。日志级别 | 颜色 | 含义 |
|---|---|---|
INFO(信息) | 蓝色 | 正常运行日志,比如任务启动、文件读取、资源分配 |
WARN(警告) | 橙色 | 非致命异常,不影响作业运行,但需要关注(比如性能告警、配置不规范) |
DEBUG(调试) | 灰色 | 详细的调试信息,用于排查深层问题 |
FATAL(致命错误) | 红色 | 导致作业失败的致命错误,是故障排查的核心 |
你提供的3张截图是构建应用的标准操作界面,所有元素都能和文档内容完全对应,这里做完整拆解,让你理解界面上每个功能的作用:
界面元素 | 对应文档内容 | 核心作用 |
|---|---|---|
Status | 作业状态 | 展示构建的当前运行状态(Running/Completed/Failed等) |
Duration | 构建生命周期 | 构建已经运行的总时长 |
Estimated | 作业执行 | 系统预估的构建剩余运行时长 |
Started | 构建生命周期 | 构建的启动时间 |
Started by | 构建运行模式 | 构建的触发人/触发方式,这里是Build schedule(定时调度) |
Progress | 作业执行 | 构建的任务完成进度,0 of 1 job succeeded表示1个作业,0个成功完成 |
Build ID | 构建生命周期 | 构建的唯一标识,用于故障排查、技术支持 |
Build schedule → WHEN TO BUILD | 构建运行模式 | 展示定时调度规则,Every 5 minutes表示每5分钟自动运行一次 |
Build schedule → RECENT RUNS | 构建运行模式 | 最近的构建运行记录,绿色点=成功运行,黄色点=当前正在运行的构建 |
Metrics/Schedule | 构建管理 | 查看构建的性能指标、修改定时调度配置 |
界面元素 | 对应文档内容 | 核心作用 |
|---|---|---|
Explore lineage | 作业依赖 | 跳转到数据沿袭页面,查看该构建对应数据集的上下游血缘 |
Cancel build | 作业状态 | 手动中止当前构建,触发作业进入ABORTED状态 |
Actions | 构建管理 | 更多操作,比如强制构建、重新运行构建 |
界面元素 | 对应文档内容 | 核心作用 |
|---|---|---|
Wrap lines | 实时日志 | 日志自动换行开关,方便查看长日志 |
时间筛选框 | 实时日志 | 筛选特定时间范围的历史日志,对实时日志无效 |
Filter logs | 实时日志 | 日志关键词搜索,快速定位故障信息 |
Columns | 实时日志 | 选择要展示的日志列(级别、时间、消息、参数等) |
View archive | 实时日志 | 查看归档的历史日志 |
Download logs | 实时日志 | 下载完整的日志文件 |
界面元素 | 对应文档内容 | 核心作用 |
|---|---|---|
Gantt chart | 作业执行 | 甘特图视图,可视化展示每个作业的运行时长、依赖关系 |
Job status | 作业状态 | 列表视图,查看每个作业的当前状态、运行时长 |
Progress details | 作业执行 | 查看每个作业的详细执行步骤 |
Critical path | 作业执行 | 查看决定整个构建时长的最长作业链路,用于性能优化 |
这份文档的构建体系,和你之前学习的所有Foundry知识形成了完整的闭环,是整个数据开发流程的最终落地环节:
构建是Foundry整个数据平台的「心脏」,所有的数据变换、同步、分析、校验,最终都要通过构建来落地。这份文档定义的构建规则,本质是在最大化计算效率和保证数据一致性、稳定性之间做了完美的平衡:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。