首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >palantir深度解析(六)

palantir深度解析(六)

原创
作者头像
小龙0-0
发布2026-04-18 23:01:08
发布2026-04-18 23:01:08
1040
举报
文章被收录于专栏:palantirpalantir

Palantir Foundry 构建体系


一、构建的核心定义与本质

文档开篇明确:构建是Foundry中计算数据集新版本的核心机制。 你可以把它理解为数据流水线的执行器:你在Pipeline Builder里画的可视化流水线、在Code Repositories里写的Python/SQL代码,都只是「逻辑定义」,只有运行构建,系统才会真正启动计算任务,把逻辑变成实际的数据集,完成数据的加工、更新与落地。

构建的核心职责

它负责协调整个计算过程,严格保证三件事:

  1. 读取正确的输入数据(对应分支回退规则、输入数据集版本校验);
  2. 执行正确的变换逻辑(对应作业规范JobSpec);
  3. 把输出数据写入正确的位置,生成合规的数据集新版本(对应数据集事务)。

构建的两种运行模式

  1. 单次构建:手动触发,一次性计算一组输出数据集的新版本;
  2. 定时调度构建:通过调度器定期自动运行,让数据在系统中持续更新,完全对应你截图1左侧的Every 5 minutes调度配置。

二、核心基础概念:作业(Job)与作业规范(JobSpec)

构建不是一个单一的任务,而是由多个作业(Job) 组成的,作业是Foundry中最小的计算执行单元,所有数据操作最终都会被封装为作业。

1. 作业(Job)

作业封装了「根据一组输入数据集,计算一个或多个输出数据集新版本」的完整过程,是构建的最小执行单元。

  • 核心硬规则:如果一个作业定义了多个输出数据集,这些数据集必须一起更新,无法只运行作业的一部分、仅更新部分数据集;
  • 作业的执行结果,最终会提交为输出数据集的一个事务,生成数据集的新版本。

2. 作业规范(JobSpec)

JobSpec是作业的「执行说明书」,它完整定义了作业的运行规则,包含两个核心部分:

  1. 输入依赖:以InputSpecs集合的形式,明确作业要读取的输入数据集,以及要读取的数据集视图、数据子集;
  2. 执行逻辑:作业要运行的具体变换代码/业务逻辑。
JobSpec的生命周期

当你修改了数据变换逻辑(比如在Code Repositories提交代码、在Pipeline Builder保存修改),系统会自动发布一个新版本的JobSpec到对应的分支。这和你之前学习的「分支构建」完全联动:不同分支的JobSpec相互隔离,构建运行时只会读取当前分支的JobSpec。

3. Foundry中所有可封装为作业的场景

文档明确,Foundry中几乎所有数据操作都会被封装为作业,通过构建执行:

  • 数据连接的同步任务:从外部数据源读取数据到Foundry;
  • Pipeline Builder/Code Repositories中的数据变换逻辑:加工、清洗、聚合数据集;
  • 数据健康检查:针对数据集运行的合规性、质量校验任务;
  • 分析应用的变换逻辑:Contour等分析工具中的数据处理任务;
  • 数据导出:把Foundry内的数据发送到外部系统。

三、作业的生命周期:8种固定状态

文档定义了作业的8种固定状态,这是你监控构建、排查故障的核心依据,作业只会在这些状态之间流转,整个构建的最终状态由所有作业的状态共同决定。

状态

核心含义

流转场景

WAITING(等待中)

作业的初始状态,正在等待上游依赖作业完成,尚未被调度

流水线存在上下游依赖,上游作业未完成时,下游作业处于该状态

RUN_PENDING(待运行)

作业已满足运行条件,正在等待执行环境(Spark集群)分配资源,尚未正式启动

上游依赖已完成,集群资源暂未到位

RUNNING(运行中)

作业已被调度,正在执行计算逻辑

对应你截图1、2中Status: Running的构建,内部作业正在运行

ABORT_PENDING(待中止)

已发起中止请求,但执行环境尚未确认中止完成

用户点击Cancel build、上游作业失败触发中止时

ABORTED(已中止)

作业已被中止,原因是用户手动取消,或上游依赖作业失败

手动中止构建、上游作业失败触发级联中止

FAILED(已失败)

作业已执行,但计算过程出错,未成功生成输出数据集

代码逻辑错误、数据格式不匹配、资源不足等导致作业崩溃

COMPLETED(已完成)

作业执行成功,顺利生成输出数据集的新版本

作业无错误运行完成,输出数据已提交到数据集

关键规则

  • 只有构建内所有作业都进入COMPLETED状态,整个构建才会被标记为成功;
  • 任何一个作业进入FAILED状态,整个构建都会被标记为失败。

四、完整的构建生命周期

文档把构建的运行过程分为两大核心阶段:构建解析(Build Resolution)作业执行(Job Execution),同时定义了「陈旧性判断」这个核心优化机制,这是构建兼顾数据一致性与执行效率的核心。

第一阶段:构建解析(Build Resolution)

这是构建运行的前置校验阶段,在正式启动计算之前,系统会完成一系列校验、准备工作,从根源上避免脏数据、循环依赖、并发写入冲突等问题。文档明确了5个核心步骤:

  1. 循环依赖检测:检查输入输出数据集之间是否存在循环依赖(比如A依赖B,B又依赖A),如果存在,构建直接失败,避免无限循环计算。
  2. 输入校验与Schema确认:验证所有输入数据集都存在、当前用户有访问权限,同时确定每个输入数据集的正确Schema,避免后续计算因Schema不匹配报错。
  3. 构建锁定(Build Locking):在每个待输出的数据集上开启一个新事务,同时给数据集加锁,保证只有当前构建能写入该数据集,避免多个构建同时写入同一个数据集导致数据错乱、冲突。这里和你之前学习的「数据集事务」完全联动:构建的输出最终会提交为数据集的一个事务。
  4. 冲突构建检测:检查是否有其他正在运行的构建会修改当前构建的输入数据集。如果有,将当前构建加入队列,等待前置构建完成后再运行,避免输入数据在计算过程中发生变化,导致结果不一致。
  5. 陈旧性判断(Staleness Check):这是Foundry的核心性能优化逻辑,文档单独做了重点说明。
补充:陈旧性判断与强制构建

系统会自动判断:自上次构建该输出数据集以来,输入数据集是否发生变化JobSpec中的变换逻辑是否发生变化

  • 如果两者都没有变化,系统认为该输出数据集是「最新的(Up-to-date)」,本次构建不会重新计算它,直接跳过;
  • 核心价值:避免无效的重复计算,大幅节省计算资源、缩短构建时间。比如你的流水线有10个节点,你只修改了最后1个节点的逻辑,构建只会重新计算最后1个节点,前面9个节点直接复用历史结果。

强制构建(Force Build):如果你需要覆盖这个默认行为,强制重新计算所有数据集(比如修改了底层UDF函数,但JobSpec没有变化),可以运行强制构建,无论数据集是否最新,都会全量重新计算。

例子:

这是一个非常经典的依赖传递场景,我用你给的 A→B→C→D→E→F 流水线例子,结合 Foundry 陈旧性判断的核心逻辑,给你一步步讲清楚原因:


(1)先明确核心前提:陈旧性判断的两个判断维度

对于流水线中的每一个单独的作业,系统都会独立做两次判断,只有当两者都没变化时,才会跳过重新计算:

输入数据集是否变化:自上次构建以来,该作业的直接输入数据集是否生成了新版本(有新的事务提交);

自身 JobSpec 是否变化:自上次构建以来,该作业自身的变换逻辑(代码/流水线配置)是否被修改。

只要其中任意一个发生了变化,该作业就会被判定为「不是最新的」,必须重新计算。


(2)结合你的例子,一步步推导

我们假设流水线是严格的线性依赖: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 必须重算。


(3)最终结论

在你的例子中,只有 A 会被跳过(因为 A 的输入和逻辑都没变),B、C、D、E、F 都会被重新计算。

这是 Foundry 保证数据一致性的核心设计:只要上游的输入数据变了,下游所有依赖它的作业都必须重新计算,确保最终结果是基于最新数据生成的。

这就好比工厂的生产线:

A 是原材料供应商,没变化;

B 是第一道工序,你改了工序参数(修改了逻辑),所以 B 要重新生产;

  • B 生产出来的零件(B 的输出数据集)变了;
  • 后面的 C、D、E、F 工序,都是用前一道工序的零件做加工,既然零件变了,后面所有工序都必须重新做一遍,才能保证最终产品是对的。

第二阶段:作业执行(Job Execution)

构建解析通过后,正式进入作业执行阶段,文档明确了核心执行规则:

  1. 并行执行:没有依赖关系的作业会并行运行,最大化利用集群资源,缩短构建总时长。比如流水线A→BA→C,B和C没有依赖关系,就会同时启动运行。
  2. 失败处理规则
    • 如果某个作业失败,所有直接依赖它的作业、对应输出数据集上的事务,都会被立即终止,避免无效计算;
    • 支持配置级联中止:某个作业失败时,同时中止所有其他不相关的作业,快速释放集群资源;
    • 【关键注意事项】作业失败时,之前已经成功完成的作业,已经把数据写入了对应的输出数据集并提交了事务,这些数据不会回滚。比如流水线A→B→C,A成功完成,B运行失败,A的输出数据集已经更新,不会回滚。
  3. 构建完成判定:当构建内的所有作业都成功进入COMPLETED状态,整个构建被标记为「已完成」,所有输出数据集的事务都会被正式提交,新的数据集版本对下游可见。

分支隔离保证

和你之前学习的分支体系完全联动:整个构建的所有操作,都只会在你指定的构建分支上生效,绝对不会修改其他分支的数据集,从执行层保障了开发测试与生产环境的完全隔离。


五、实时日志:构建监控与故障排查的核心工具

这部分内容与你提供的截图2、3完全对应,是你监控作业进度、排查构建故障的核心能力。

1. 核心作用

实时日志会流式展示正在运行的作业的实时日志,让你可以实时监控作业进度、排查长时间运行的任务(比如流处理任务、大计算量的离线任务)。

2. 界面入口与操作

  • 入口:完全对应截图2右上角的View live按钮,在构建应用的日志查看器右上角,点击即可启动实时日志流;
  • 核心操作:支持随时点击「暂停」停止日志流,方便查看特定日志内容,也可以随时恢复播放;
  • 附加功能:对应截图中的Download logs按钮,可下载完整日志文件用于离线排查、归档;Filter logs搜索框可通过关键词快速定位目标日志。

3. 核心特性

  1. 日志级别颜色编码:完全对应截图3中的日志颜色,文档明确了标准配色规则,让你可以快速识别日志优先级:

日志级别

颜色

含义

INFO(信息)

蓝色

正常运行日志,比如任务启动、文件读取、资源分配

WARN(警告)

橙色

非致命异常,不影响作业运行,但需要关注(比如性能告警、配置不规范)

DEBUG(调试)

灰色

详细的调试信息,用于排查深层问题

FATAL(致命错误)

红色

导致作业失败的致命错误,是故障排查的核心

  1. 结构化日志展示:安全参数、配置参数会以JSON块的形式展示,格式清晰易读,对应你截图1中的JSON格式日志;
  2. 关键限制:时间范围筛选对实时日志无效,因为它是从作业实时流式传输的,仅展示当前正在生成的日志。

六、全元素与文档的对应拆解

你提供的3张截图是构建应用的标准操作界面,所有元素都能和文档内容完全对应,这里做完整拆解,让你理解界面上每个功能的作用:

左侧「Build info」面板(截图1、2)

界面元素

对应文档内容

核心作用

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

实时日志

下载完整的日志文件

底部「Build progress」面板

界面元素

对应文档内容

核心作用

Gantt chart

作业执行

甘特图视图,可视化展示每个作业的运行时长、依赖关系

Job status

作业状态

列表视图,查看每个作业的当前状态、运行时长

Progress details

作业执行

查看每个作业的详细执行步骤

Critical path

作业执行

查看决定整个构建时长的最长作业链路,用于性能优化


七、与之前学习内容的完整联动

这份文档的构建体系,和你之前学习的所有Foundry知识形成了完整的闭环,是整个数据开发流程的最终落地环节:

  1. 与数据集/事务的联动:构建的输出最终会提交为数据集的一个事务,生成数据集的新版本;构建锁定机制保证了数据集事务的原子性,避免并发写入冲突。
  2. 与分支的联动:构建完全基于分支运行,只会修改构建分支上的数据集,实现了开发测试与生产环境的隔离;构建的JobSpec、输入数据集都基于分支回退链读取。
  3. 与Pipeline Builder/Code Repositories的联动:你在这两个工具中定义的流水线逻辑,最终会生成JobSpec提交到对应分支;运行构建,就是执行这些JobSpec,把逻辑变成实际的数据集。
  4. 与数据健康的联动:数据健康检查本质就是一个作业,通过构建定期运行,验证数据集的健康状态,生成告警。
  5. 与数据连接的联动:数据连接的同步任务也是一个作业,通过构建定期运行,从外部数据源同步数据到Foundry。
  6. 与流处理的联动:流处理任务的持续运行、检查点更新,也是通过构建来管理的,实时日志是监控流任务运行的核心工具。

核心价值总结

构建是Foundry整个数据平台的「心脏」,所有的数据变换、同步、分析、校验,最终都要通过构建来落地。这份文档定义的构建规则,本质是在最大化计算效率保证数据一致性、稳定性之间做了完美的平衡:

  • 通过陈旧性判断、并行执行,最大化节省计算资源,提升运行效率;
  • 通过构建解析、锁定、循环检测,严格保证数据的一致性,避免脏数据、写入冲突;
  • 通过分支隔离,从执行层保障开发测试不影响生产环境;
  • 通过实时日志、全维度状态监控,让流水线的运行完全透明可控,为故障排查提供了完整的工具链。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Palantir Foundry 构建体系
    • 一、构建的核心定义与本质
      • 构建的核心职责
      • 构建的两种运行模式
    • 二、核心基础概念:作业(Job)与作业规范(JobSpec)
      • 1. 作业(Job)
      • 2. 作业规范(JobSpec)
      • 3. Foundry中所有可封装为作业的场景
    • 三、作业的生命周期:8种固定状态
      • 关键规则
    • 四、完整的构建生命周期
      • 第一阶段:构建解析(Build Resolution)
      • 第二阶段:作业执行(Job Execution)
      • 分支隔离保证
    • 五、实时日志:构建监控与故障排查的核心工具
      • 1. 核心作用
      • 2. 界面入口与操作
      • 3. 核心特性
    • 六、全元素与文档的对应拆解
      • 左侧「Build info」面板(截图1、2)
      • 顶部操作栏
      • 日志面板
      • 底部「Build progress」面板
    • 七、与之前学习内容的完整联动
    • 核心价值总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档