Kedro中的节点分组:管道、标签与命名空间¶
在部署过程中有效地对节点进行分组对于可维护性、调试和执行控制至关重要。本文档概述了三种关键分组方法:管道(pipelines)、标签(tags)和命名空间(namespaces),包括它们的优势、局限性、最佳使用场景以及相关文档链接。
按流水线分组¶
如果你的项目包含不同的流水线,可以将它们作为预定义的节点分组用于部署。在部署环境中,这些流水线可以单独执行。通过Kedro Viz的可视化功能,你可以切换到隔离视图查看不同的流水线。

如果您希望以不同于现有管道结构的方式对节点进行分组,可以使用标签或命名空间,而无需创建新的管道。kedro run --pipeline命令一次只能运行一个管道,因此无法在单一步骤中执行多个管道。虽然您可以在Kedro Viz中切换不同管道,但流程图视图不支持折叠或展开它们。
最佳使用场景
您已经将逻辑分离到不同的管道中,并且项目结构支持在部署环境中独立执行它们。
不适用场景
您需要同时运行多个流水线。
您希望在Kedro Viz中使用展开和折叠功能。
如何使用
kedro run --pipeline=<your_pipeline_name>
更多信息:按名称运行管道
按标签分组¶
您可以为单个节点或整个流水线添加标签,从而无需修改流水线结构即可灵活执行特定部分。Kedro-Viz提供了清晰的标签节点可视化,使理解更加容易。

请注意,具有相同标签的节点可以存在于不同的管道中,这使得调试和维护代码库更具挑战性,而且标签不像管道或命名空间那样强制执行结构。
最佳使用场景
您需要运行不属于同一管道的特定节点。
您希望重新运行大型管道中的一部分节点。
不适用场景
标记的节点具有强依赖关系,可能导致执行失败。
标签不是层级结构的,因此跟踪节点组可能会变得困难。
如何使用
kedro run --tags=<your_tag_name>
更多信息:如何标记节点
按命名空间分组¶
命名空间允许您对节点进行分组,确保在保持结构一致性的同时,在流水线内实现清晰的依赖关系和隔离。与流水线或标签类似,您可以使用命名空间启用选择性执行,但无法同时运行多个命名空间——Kedro每次仅允许执行一个命名空间。Kedro Viz支持在可视化界面中展开和折叠命名空间流水线。

使用命名空间会带来一些挑战:
在流水线级别定义命名空间: 当在流水线级别应用命名空间时,Kedro会自动重命名该流水线内的所有输入、输出和参数。您需要相应地更新目录。如果您在使用命名空间时不想通过
namespace_name.前缀更改输入、输出或参数的名称,您应该将这些对象列在pipeline()创建函数的相应参数中。例如:
return pipeline(
base_pipeline,
namespace = "new_namespaced_pipeline", # With that namespace, "new_namespaced_pipeline" prefix will be added to inputs, outputs, params, and node names
inputs={"the_original_input_name"}, # Inputs remain the same, without namespace prefix
)
在节点级别定义命名空间:不建议在节点级别定义命名空间来对节点进行分组。节点级别的命名空间定义应用于在Kedro-Viz上创建可折叠视图,以便对节点进行高级表示。如果在节点级别定义命名空间,它们的行为类似于标签,不能保证执行一致性。
最佳使用场景
您希望在保持结构化执行流程的同时,在流水线中按逻辑组织节点。您还可以将命名空间流水线相互嵌套以实现可视化。
您的流水线结构定义清晰,使用命名空间可以提升在Kedro-Viz中的可视化效果。
不适用场景
在小型简单项目中,使用命名空间可能会引入不必要的复杂性,使得管道分组成为更合适的选择。
命名空间需要额外的工作,例如更新目录名称,因为命名空间前缀会自动应用于所有元素,除非在命名空间管道参数中明确覆盖。
如何使用
kedro run --namespace=<your_namespace_name>
更多信息:Namespaces
汇总表格
方面 |
管道 |
标签 |
命名空间 |
|---|---|---|---|
适用场景 |
如果您对现有流水线中的节点结构感到满意,或者您的流水线复杂度较低且不需要新的分组视图,则无需使用任何替代方案 |
为单个节点或整个流水线添加标签可以实现灵活执行特定部分而无需修改流水线结构,Kedro-Viz能清晰可视化这些带标签的节点以便更好理解。 |
命名空间将节点分组以确保流水线内清晰的依赖关系和分离,支持选择性执行,并可通过Kedro-Viz进行可视化。 |
不适用场景 |
若需采用不同于当前管道结构的分组方式,无需创建新管道,可使用标签或命名空间等替代分组方法。 |
缺乏层次结构,使用标签会增加代码库调试和维护难度 |
在节点层级定义命名空间的效果类似标签但无法保证执行一致性,而在管道层级定义可通过重命名输入、输出和参数实现模块化,但若管道在其他位置连接或参数在管道外部引用时可能引发命名冲突。 |
语法 |
|
|
|