Kedro 节点分组实战:Pipelines、Tags 与 Namespaces 的选型与部署用法
2026/9/15 22:32:31 网站建设 项目流程

Kedro 节点分组实战:Pipelines、Tags 与 Namespaces 的选型与部署用法

【免费下载链接】kedroKedro is a toolbox for production-ready data science. It uses software engineering best practices to help you create data engineering and data science pipelines that are reproducible, maintainable, and modular.项目地址: https://gitcode.com/GitHub_Trending/ke/kedro

在生产环境中部署 Kedro 数据管道时,如何有效组织、筛选和执行节点,直接关系到可维护性、调试效率与执行控制。本文聚焦 Kedro 提供的三种节点分组机制——Pipelines(流水线)、Tags(标签)与 Namespaces(命名空间),详细对比它们在 Kedro Viz 可视化、选择性执行、插件集成等方面的能力边界,并结合当前仓库源码解析其底层实现,帮助你在部署场景中做出正确选型并落地使用。

三种分组机制概览

Kedro 的节点(Node)是管道的最小执行单元,而分组机制解决的是"如何把众多节点组织成可独立执行、可单独调试、可清晰可视化的集合"这一问题。当前仓库提供了三种分组手段:

分组机制核心思想典型命令
Pipelines(流水线)以项目预定义的流水线为分组,独立或组合执行kedro run --pipelines=<name>
Tags(标签)给单个节点或整条流水线打标签,按标签灵活挑选节点kedro run --tags=<tag>
Namespaces(命名空间)通过命名空间前缀对节点进行层级分组,保证依赖清晰kedro run --namespaces=<ns>

三种机制各有擅长的场景,也存在明显的限制。下面逐一展开。


按流水线(Pipelines)分组

适用场景与限制

如果项目已经将逻辑拆分为多条流水线(例如数据工程流水线data_engineering与数据科学流水线data_science),就可以把它们作为部署时天然的节点分组:

  • 适合使用:项目结构已经支持各流水线在部署环境中独立执行,或按顺序组合执行。
  • 不适合使用:你需要在 Kedro Viz 中展开/折叠(expand/collapse)流水线视图。从 Kedro Viz 的流程图视图(flowchart view)来看,流水线视图不支持折叠或展开;如果你需要这种交互能力,应改用命名空间。

在 Kedro Viz 中,你可以切换查看不同流水线的独立视图。如果希望按不同于现有流水线结构的方式重新分组,推荐用标签或命名空间,而不是新建一条流水线。

如何执行

# 运行单条流水线 kedro run --pipelines=<pipeline_name> # 一次运行多条流水线 kedro run --pipelines=<pipeline_name1>,<pipeline_name2>

源码实现:--pipelines选项的底层行为

在 CLI 定义 中,--pipelines选项使用split_string回调把逗号分隔的字符串解析为列表,其帮助信息为:

Comma-separated names of registered pipelines to run. Example: --pipelines data_engineering,feature_engineering If not set, the '__default__' pipeline is run.

值得注意的两个 CLI 细节(见 run 命令校验逻辑):

  • --pipeline(单数,-p)与--pipelines(复数)不能同时使用,同时传入会抛出KedroCliError
  • 单数形式的--pipeline已标记为弃用(会发出KedroDeprecationWarning),建议统一使用--pipelines
  • 未指定--pipelines时,默认运行注册表中名为__default__的流水线。

在 Session.run 的实现 中,多流水线通过combined_pipelines += pipelines[name]依次合并为一条组合流水线后统一执行,这也解释了为什么--pipelines支持用逗号一次指定多条。


按标签(Tags)分组

适用场景与限制

标签允许你给单个节点整条流水线打上标记,从而在不修改流水线结构的前提下灵活执行指定片段。Kedro Viz 会为带标签的节点提供清晰的筛选可视化(Filters Panel),便于理解和定位。

但需要注意标签的两点局限:

  • 同一标签的节点可以分布在不同的流水线中,这种跨流水线的重叠会给调试和维护带来额外负担;
  • 标签没有层级结构,也不像流水线或命名空间那样强制约束组织方式,跟踪节点分组会变得困难。

何时该用、何时不该用

  • 适合使用
    • 需要运行不属于同一条流水线的若干特定节点;
    • 想在大型流水线中只重跑一个节点子集(例如只重跑数据校验相关的节点)。
  • 不适合使用
    • 被标记节点之间存在强依赖关系,可能会导致执行失败;
    • 标签的非层级特性让你难以跟踪节点分组。

如何执行

kedro run --tags=<your_tag_name>

--tags(别名-t)在 CLI 定义 中使用split_string回调解析,并且根据帮助文本(TAG_ARG_HELP),该选项可以多次使用,多次使用时只要节点命中任意一个标签就会被选中("nodes having any of those tags")。

源码实现:标签如何挂载与筛选

标签在节点层定义。在 Node 的构造函数 中,tags参数支持str | Iterable[str] | None,最终被归一化为一个集合(self._tags = set(_to_list(tags))),并通过只读属性tags对外暴露。Node.tag(...)方法则返回一个"追加了标签"的节点副本(见 Node.tag 实现),保证原节点不可变。

在流水线层,筛选逻辑位于 Pipeline.only_nodes_with_tags,它返回只包含命中标签节点的新Pipeline对象。Session.runtags参数(见 session.py#L280-L298)正是把 CLI 传入的标签集合用于这一步过滤:只要节点包含任意一个给定标签,该节点就会被纳入本次运行


按命名空间(Namespaces)分组

核心特性

命名空间允许你在保持流水线结构一致的前提下,将节点分组以理清依赖与界限。与流水线、标签类似,命名空间也支持选择性执行;但 Kedro 规定一次只能执行一个命名空间(不能同时运行多个)。Kedro Viz 支持对命名空间流水线进行展开/折叠,这正是它区别于流水线分组的关键能力。

两个层级的定义及其注意事项

Pipeline 级命名空间:自动重命名数据对象

当在 Pipeline 级应用命名空间时,Kedro 会自动为该流水线内的所有输入、输出和参数加上namespace_name.前缀,因此你需要同步更新 catalog 中的数据集名称。如果不希望某些输入、输出或参数被加前缀,可以把它们列在Pipeline类的对应参数中,例如:

return Pipeline( base_pipeline, namespace = "new_namespaced_pipeline", # 应用该命名空间后,"new_namespaced_pipeline" 前缀会被加到输入、输出、参数及节点名上 inputs={"the_original_input_name"}, # 输入保持原名,不加命名空间前缀 )

除了inputsPipelineoutputsparameters参数同样可以显式豁免对应数据对象的重命名。

Node 级命名空间:不推荐用于分组

在节点级定义命名空间不推荐用于节点分组。节点级命名空间应服务于 Kedro Viz 中创建可折叠视图、对节点做高层级表示;如果用它来分组,行为会与标签相似,无法保证执行一致性(例如命名空间被"打断"时可能产生意外的执行顺序)。

何时该用、何时不该用

  • 适合使用
    • 需要在流水线内对节点做逻辑组织,同时保持结构化的执行流程,还希望嵌套命名空间流水线以获得更好的可视化;
    • 流水线结构定义清晰,使用命名空间能显著改善 Kedro Viz 中的可视化效果。
  • 不适合使用
    • 小型项目、流水线本身很简单时,命名空间会引入不必要的复杂度,此时按流水线分组更合适;
    • 命名空间需要额外投入,例如更新 catalog 中的数据集名——因为除非在命名空间流水线参数中显式覆盖,前缀会自动应用到所有元素。

如何执行

kedro run --namespaces=< namespace1,namespace2 >

--namespaces(别名-ns)在 CLI 定义 中使用split_node_names回调解析,帮助文本为Run only node namespaces with specified names.

源码实现:命名空间的底层机制

数据集名校验与点号保留

命名空间机制的关键前提是:点号(.)被 Kedro 保留用于命名空间表示。在 节点数据集名校验函数 中,如果数据集名包含.且不是params:前缀的参数,Kedro 会检查其顶层命名空间是否与节点命名空间匹配,不匹配时发出UserWarning,提示点号记法已保留给自动命名空间使用。

前缀应用规则与豁免

在 Pipeline 构造逻辑 中,namespaceprefix_datasets_with_namespace(默认True)共同决定前缀如何应用:

  • _prefix_dataset会生成${namespace}.${name}
  • params:参数则生成params:${namespace}.${param_name}
  • 只有当prefix_datasets_with_namespaceTrue时,前缀规则才会被加入数据集重命名映射,这正是inputs/outputs/parameters参数能够"豁免"特定数据对象的实现基础。
命名空间的层级与执行一致性校验

节点命名空间天然支持层级(如a.b.c),Node.namespace_prefixes 会返回从短到长的全部层级前缀(['a', 'a.b', 'a.b.c'])。相应地,Pipeline._validate_namespaces 会在管道构建时校验命名空间的"连续性":如果一个节点的命名空间在依赖路径中被另一个命名空间的节点"打断"(即不属于父子层级关系),会被标记为 interrupted 并记录,从而在构建阶段就暴露出可能破坏执行一致性的结构问题。

按命名空间筛选与分组
  • 筛选:only_nodes_with_namespaces(见 pipeline.py#L669-L700)返回只包含指定命名空间节点的新Pipeline,支持精确匹配和前缀匹配(n.namespace.startswith(f"{node_namespace}.")),未命中任何节点的命名空间会抛出ValueError
  • 分组:group_nodes_by("namespace")(见 pipeline.py#L567-L628)按顶层命名空间node.namespace.split(".")[0])把节点聚合成GroupedNodes,每个分组记录其内部节点列表与跨命名空间的依赖关系;未设置命名空间的节点则退化为以自身为组。

命名空间与部署插件的集成

部署 Kedro 管道时,部分插件支持按命名空间分组节点,以生成更高效的任务结构:

Kedro-Airflowkedro-airflow插件支持在生成 Airflow DAG 时按命名空间分组。使用--group-by namespace标志,可将同一命名空间内的所有节点合并为单个 Airflow task:

kedro airflow create --group-by namespace

这样做可以减少 Airflow 任务数量,并让逻辑相关的节点保持在一起。更多细节可参考 Airflow 部署指南。

AWS Step Functions:根据 AWS Step Functions 部署指南,使用Pipeline.group_nodes_by("namespace")让每个流水线级命名空间映射为一个 Lambda 函数和一个 Step Functions task。

AWS Batch:根据 AWS Batch 部署指南,同样使用Pipeline.group_nodes_by("namespace"),让每个流水线级命名空间映射为一个 Batch job。

从 group_nodes_by 的源码 可以看到,该方法支持"namespace"None/"none"两种策略,其他取值会抛出ValueError——这也是上述部署插件调用group_nodes_by("namespace")时遵循的契约。


总结:三种分组机制速查

AspectPipelinesTagsNamespaces
适用的场景现有流水线结构已经满足需求,或流水线复杂度低、不需要新的分组视图时,无需改用其他机制给单个节点或整条流水线打标签,可在不改变流水线结构的前提下灵活执行指定片段,Kedro Viz 提供清晰的标签节点可视化命名空间对节点分组以理清流水线内的依赖与界限,支持选择性执行,并可在 Kedro Viz 中展开/折叠可视化
不适用的场景若想按不同于现有流水线结构的方式分组,不必新建流水线,改用标签或命名空间即可缺乏层级结构,用标签会让调试和维护代码库变得更困难节点级命名空间行为类似标签、无法保证执行一致性;流水线级命名空间会重命名输入、输出与参数,若流水线在别处被连接或参数在流水线外被引用,可能引发命名冲突
语法kedro run --pipelines=<your_pipeline_names>kedro run --tags=<your_tag_name>kedro run --namespaces=< namespace1,namespace2 >
部署插件支持不适用不适用kedro airflow create --group-by namespace;AWS Step Functions(部署指南);AWS Batch(部署指南)

选型建议

综合三种机制的特点,可以给出如下决策路径:

  1. 优先复用现有流水线:项目已按流水线拆分且结构合理,直接用kedro run --pipelines=<name>执行,零额外成本;
  2. 需要临时挑选节点:跨流水线挑选节点、或在大流水线中重跑子集,用标签(--tags);
  3. 需要层级组织与 Viz 展开/折叠:流水线结构清晰且希望获得更好的可视化与部署任务聚合能力,用命名空间(--namespaces),并注意同步更新 catalog 中的数据集名。

需要进一步探索的仓库位置:CLI run 命令定义、Pipeline 分组与筛选实现、Node 命名空间与标签属性、Session 运行过滤逻辑。

【免费下载链接】kedroKedro is a toolbox for production-ready data science. It uses software engineering best practices to help you create data engineering and data science pipelines that are reproducible, maintainable, and modular.项目地址: https://gitcode.com/GitHub_Trending/ke/kedro

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询