数据连接与集成优化管道Optimizing pipelinesFoundry 使用优化

注意:以下翻译的准确性尚未经过验证。这是使用 AIP ↗ 从原始英文文本进行的机器翻译。

Foundry 使用优化

Foundry 使用优化最佳实践

以下指南旨在提供优化 Foundry 使用的方法和最佳实践。本文档首先涵盖了如何确定 Foundry 中的使用情况,其次是如何识别使用浪费和优化管道。一般建议可能也会对项目经理或平台管理员感兴趣,因为他们专注于监控和优化组织的使用消耗。

除了这里列出的最佳实践外,Linter 会检查 Foundry 中的反模式状态,并提供有见地的建议以改善资源状态。您可以评估并采取这些建议来降低成本,优化您的 Ontology,并提高管道的稳定性和弹性。

何时优化

在考虑如何为您的工作流程实施这些最佳实践时,重要的是不要陷入过早优化管道或工作流程的常见陷阱。用户应避免过早优化管道,并且不应期望有一种万能的优化策略。

我们建议按照以下心理步骤来检查您的方法的有效性:

  • 工作流程是否已完成并正常工作?如果没有,请注意过早优化可能会影响工作流程的功能。
  • 此优化是否有明确的目标,例如可视化时间或成本,这将用作推动进一步决策的成功指标?
  • 是否已经定义了针对上述目标的瓶颈?

如果这些问题中的一些尚未得到回答,这可能表明需要更多的前期工作以确保优化工作的成功。

考虑到这一点,以下是优化工作的好坏示例:

  • [好] 一个正在运行的管道成本为 $X,一名工程师被要求是否可以减少成本。资源管理 应用程序显示大部分成本与计算资源相关。显示搭建频率后,工程师发现计划每天运行一次,尽管没有人每天都使用它。更改计划设置为不那么频繁的运行将减少约 28% 的消耗。之后,该管道将不再是平台上最昂贵的,工程师可以专注于改进下一个瓶颈。
  • [坏] 一名工程师被要求设计一个高级策略来优化管道的存储成本,这需要大量的工程时间。一旦实施了该策略,存储成本确实减少了,但整体基础设施账单保持不变。为什么?瓶颈——存储——是基于节省成本的目标错误识别的。尽管数据集的存储量不必要地高,但相对于计算成本的低存储成本意味着该更改对工作流程的总使用成本仅产生了轻微影响。

一般最佳实践

优化您的 Foundry 使用的一些一般实践包括:

  • 设置项目以便能够在资源管理应用程序中跟踪使用情况
  • 利用资源队列
  • 尽可能使用增量管道
  • 管理计划以确保它们满足并不超过您的组织需求
  • 优化 Spark 使用(取决于您对实现的熟悉程度)

步骤 1:了解 Foundry 使用的组成部分

Foundry 使用由三个组成部分组成:Foundry 计算、Ontology 体积和 Foundry 存储。

大多数账户都采用这种三维模型;然而,某些账户的使用标准可能有所不同。与您的 Palantir 代表审查条款以确认。

1. Foundry 计算

Foundry 计算 由用于数据集成和分析的工具驱动。Foundry 计算有三种主要类型:批处理、交互式和流处理。

批处理计算表示以“批处理”方式运行的查询或任务,意味着它们在某个计划的节奏或临时基础上在后台触发运行。当批处理计算任务未运行时,它们不会消耗任何计算资源。批处理计算的几个示例包括所有变换任务、从 Contour 构建数据集、代码工作簿、数据健康检查以及同步到 Ontology/索引存储。

交互式计算表示实时评估的查询,通常作为交互式用户会话的一部分。为了向用户提供快速响应,交互式计算系统保持始终开启的空闲计算状态,这意味着交互式查询往往会占用更多的计算资源。主要的交互式计算形式是 Contour - Contour 仪表盘、分析和嵌入的 Contour 图表都是交互式计算的示例。

流计算表示始终开启的处理任务,持续接收消息并使用任意逻辑处理它们。流计算的测量方式是流准备接收消息的时间长度;与批处理和交互式计算相比,流计算的成本最高。流计算的示例包括流变换和 Pipeline Builder 流。

批处理、交互式和流计算的计算使用量由以下因素驱动:

  • 数据逻辑:应用于数据的逻辑是影响 Foundry 使用的最大因素之一,并且是用户可以最大程度地影响的因素。
  • 变换速度:通过并行化任务来实现变换速度。Foundry 可以扩展到数千台同时运行的机器,以快速处理大数据集上的大量计算。然而,快速结果和并行化任务可能会引入开销和低效,从而导致更多的使用。
  • 计算类型:不同的计算类型在相同数据上执行时需要不同的计算量。例如,批处理通常比流数据处理占用的计算资源更少,因为批处理仅在运行时使用计算资源,而流处理始终开启。
  • 数据规模和类型:数据越多,处理所需的计算资源就越多。
  • 数据新鲜度:计算新结果的频率越高,计划变换的次数越多,执行所需的计算资源也就越多。

2. Ontology 体积

Foundry 使用的第二个组成部分是 Ontology 体积。Foundry 最独特的功能之一是 Ontology 层。Ontology 是企业数据和组织关心的对象之间的翻译层。Ontology 是对数据世界的分类,使组织能够以更具体的术语(如“飞机”或“汽车”)来考虑其数据,而不是描述它们的许多行和列的聚合。如果您不熟悉 Ontology,您可以从文档中了解更多

Ontology 体积由以下因素驱动:

  • 对象数量:Foundry 的 Ontology 层可以扩展到每个对象类型数十亿个对象。某个对象类型的总 Ontology 体积与对象总数直接相关。
  • 对象大小:Ontology 对象每个可以有数百个任意类型的属性。具有更多或更大属性(例如,长文本或图像)的对象使用更多的 Ontology 体积。
  • 对象与对象之间的链接数量:具有许多链接到其他对象的对象,由于其链接元数据的大小,可能会使用更多的 Ontology 体积。

3. Foundry 存储

Foundry 存储 测量在 Foundry 中非 Ontology 变换层中存储的一般用途数据,有时称为“冷存储”。

数据集分支和以前的事务(以及视图)会影响单个数据集消耗的磁盘空间。Foundry 提供各种保留规则,以帮助您保持 Foundry 实例的精简。当通过 DELETE 事务从视图中删除文件时,文件不会从底层存储中删除,因此会继续累积存储成本。减少大小的唯一方法是使用保留规则清理不必要的事务。提交 DELETE 事务或更新分支不会减少使用的存储量。

清楚了解构成 Foundry 使用的内容及其影响因素,可以为您提供优化机会的洞察。

Foundry 应用程序使用影响类型
代码库Foundry 计算
Pipeline BuilderFoundry 计算
代码工作簿Foundry 计算
ContourFoundry 计算
实时模型Foundry 计算
OntologyOntology 体积
数据集Foundry 存储

步骤 2:了解如何跟踪 Foundry 使用

资源管理应用程序 提供了组织了解其 Foundry 使用情况的可见性和透明度。该应用程序使用户能够查看按每种 Foundry 使用类型(Foundry 计算、Ontology 体积和 Foundry 存储)划分的 Foundry 使用情况。用户可以按资源(项目)、来源(应用程序)和用户查看使用情况。

在尝试确定 Foundry 使用优化的地方时,首先要检查的是资源管理应用程序。这使您能够看到哪些资源占用了最多的计算资源,并确定您有瓶颈的地方。从这里,您可以利用 Foundry 使用优化最佳实践 来识别潜在的减少使用的方法,但始终记住——专注于瓶颈

步骤 3:设置项目以便能够跟踪 Foundry 使用

项目和资源管理应用程序

如上所述,计算资源默认在资源管理(RMA)中按项目级别管理;在 RMA 中,我们看到每个项目测量的 Foundry 计算、Ontology 体积和 Foundry 存储指标。因此,正确的项目设置对于有效跟踪数据管道中的使用指标至关重要。正确的设置将使数据工程师或平台管理员能够在管道的关键阶段监控这些使用指标,以识别优化区域。不正确的设置将导致无法识别资源密集和计算成本高的数据管道部分。

跟踪 Foundry 使用的推荐项目结构

Foundry 项目应被用于启用结构合理的数据管道。推荐的项目设置和管道阶段的最佳实践在 推荐的项目和团队结构文档 中有详细介绍。确保项目遵循推荐的结构,从导入数据源的原始数据到实际工作流程,将使用户能够分析管道关键阶段的计算和存储指标。

权限

在寻找使用减少策略时,管理员应考虑他们团队中谁应有权创建项目和资源。将此访问权限限制为少数了解设置最佳实践的个人,将减少项目和资源的扩散,从而减少不必要的存储和计算。允许任何用户在平台上创建项目可能会导致项目未按推荐的结构创建,从而导致不必要且昂贵的管道,最终增加使用量。组织可以根据平台上用户的数量和数据访问限制来管理项目创建访问权限;制定确定此访问权限的流程,并教育那些有访问权限的人正确的项目结构,这对于这些资源的正确使用监控至关重要。

步骤 4:资源队列

资源管理应用程序中的一个关键功能,使您能够控制 Foundry 中的支出,是 资源队列。为了限制与特定项目或多个项目相关的计算资源数量,您可以将项目捆绑到队列中。每个队列将被分配一个特定的资源限制,定义一次使用的最大 vCPU 数量。例如,您可以为给定队列分配 XXX 个 vCPU,这是分配的项目在任何给定时间运行的最大 vCPU 数量。这将确保您对每个项目的使用量有可见性和意识。

步骤 5:增量管道

增量管道 通常用于处理随着时间显著变化的输入数据集。通过避免对所有未更改的数据行或文件进行不必要的计算,增量管道能够降低端到端延迟,同时最小化计算成本。实现这一目标的方法是了解 SNAPSHOTAPPEND 事务之间的区别。

快照事务

默认事务类型是 SNAPSHOT。快照事务被视为数据集中的所有数据的替换。这意味着当您打开一个最新事务类型为 SNAPSHOT 的数据集时,预览将仅包含该最新快照事务中接收的数据。同样,当您在数据变换或 Contour 分析中尝试读取该数据集时,您将仅看到来自最新事务的数据。

快照是默认事务类型,因为它是最容易使用的——每次同步运行时,它都会下载数据库查询返回的所有数据,并创建一个快照事务,有效地替换数据集中之前的所有数据。以前事务中存在的文件当然仍然可以在数据集的历史版本中使用,但预览和使用数据的下游变换现在默认访问新事务。

当然,正确使用快照事务是简单的,但每次复制所有数据可能非常低效。一种潜在的效率改进是使用 APPEND 事务类型。

附加事务

当一个数据集由附加事务组成时,它的默认视图是所有事务的总和。这意味着使用 APPEND 事务类型时,您不必同步已上传的文件——仅同步新数据到 Foundry。这导致 Foundry 存储减少,因为每个事务仅包含新增文件,而不是源系统中所有可用数据的快照。

步骤 6:管理计划

另一种优化 Foundry 使用的方法是通过计划。计划 在调度工具中配置,用于在定期基础上运行 构建,以确保数据在 Foundry 中持续流动。

计划应设置为满足您的组织需求,但为了优化 Foundry 使用,必须确保计划设置高效,并且不会运行超过必要。例如,如果您设置一个数据集每天早上 8 点刷新,但实际上不需要每天早上 8 点更新数据——您的组织正在浪费 Foundry 使用。相反,您可以将计划设置为需要更新数据的频率,例如,每隔一天的早上 8 点。进行此调整将使 Foundry 使用量减半。

考虑优化计划的最佳实践时,需牢记的两个主要主题是 1)消除重复的计划,2)消除不必要的计划。

消除重复计划

要识别冗余计划,请首先进入 数据沿袭 应用程序并将节点颜色更改为 Schedule Count。如果选择的节点有多个计划与之关联,请选择该节点并查看 Manage schedule 工具。在那里,您可以查看关联的计划,确定其所有者,以及是否可以合并。

最佳实践是确保管道中的每个数据集只有一个计划的构建与之关联。 由两个不同计划构建的数据集可能会导致排队并减慢两个计划的速度,并且浪费批处理计算。

减少冗余计划的另一个最佳实践是避免完全构建并使用连接构建。一个例子是包括原始数据集、清理数据集、数据变换,然后最终以 Ontology 结束的 Ontology 管道。您只需要一个计划,其中原始数据集是触发器,Ontology 数据集是目标,而不是设置三个计划,一个运行原始数据集,第二个运行清理数据集,第三个运行变换数据集。

消除不必要的计划

要识别不必要的计划,请进入数据沿袭应用程序并按 Time since last built 着色节点。这使您可以查看哪些数据更新最频繁,并确定这是否是您组织的最优频率。

计划的频率和时间是优化使用的关键因素。您的组织需要多频繁更新数据?

  • 如果您有一个设置为每日的计划,请考虑您是否需要在周末更新数据。如果不需要,将计划更改为仅在周一至周五更新,可能会为该管道或数据集节省近 30% 的 Foundry 批处理计算使用。
  • 如果您有一个设置为每天运行三次的计划,您的组织是否在一天内使用三次更新的数据,还是每晚一次就足够了?
  • 是否需要基于时间的触发器,还是条件触发器可以工作?您需要每天凌晨 2 点刷新管道,还是只有在某个输入数据集刷新时才刷新?基于事件的触发器通常比基于时间的触发器更高效,节省更多的使用。

另外,最好不要尝试在同一时间安排所有的构建,以确保调试更高效并使用更少的计算资源。考虑频率和时间时,重要的是回到您的组织需求,并确保您设置的刷新率符合您的组织需求,但不超过。

最后,在设置计划时查看高级选项也很重要。考虑强制执行失败时中止构建以减少浪费的批处理计算。您还可以将失败任务的允许尝试次数更新为三次或更少,而不是最大尝试次数 5 次。还建议将重建之间的分钟数设置为至少一到三分钟,以便有时间解决导致失败的任何故障。

步骤 7:优化 Spark

Spark 是一个开源的分布式集群计算框架,用于快速的大规模数据处理和分析。Spark 通过将工作分配到不同的系统并并行处理它们,而不是线性等待完成所有工作,使计算机更容易和更快地处理大量数据或分析。

作为初步声明,并作为优化的一般最佳实践,我们建议仅在识别出特定瓶颈时手动调整 Spark 配置,而不是在整个平台上普遍应用。这是因为新的优化功能正在逐步添加并启用 Foundry 中没有手动覆盖的变换功能。一个简单的例子是 Spark 3 上的动态分配引入。以前手动设置变换的执行者数量非常重要,而现在这个数量在执行时会自动调整以避免浪费。

优化 Spark 只应由熟悉 Spark 概念并对其在管道中的使用有深刻理解的用户进行。

优化 Spark 的第一步是审查和理解