
Kedro 架构全景解析项目、框架、库与扩展如何协同支撑生产级数据管线【免费下载链接】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本篇文章以 docs/getting-started/architecture_overview.md 为核心骨架结合本仓库源码kedro/framework、kedro/io、kedro/pipeline、kedro/config 等对 Kedro 的整体架构进行纵深解读。读完你将掌握Kedro 的五大组成部分项目、框架、Starter、库、扩展各自承担什么职责、它们之间的边界与调用关系以及如何根据自己的工作方式选择全量采用、按需引入、二次扩展三种用法。三种使用 Kedro 的方式从架构文档出发Kedro 并没有强制要求你必须以某种固定方式使用它。根据工作流的不同存在三种典型路径端到端采用 Kedro同时使用框架framework、项目模板project、Starter 与库library。这是收益最完整的路径——从项目脚手架、配置加载、Pipeline 建模到执行调度全部由 Kedro 提供能够获得可复现、可维护、模块化的完整价值主张。按需引入 Kedro 组件在既有代码库中仅导入DataCatalogI/O、OmegaConfigLoader、pipeline与runner等库组件不采用 Kedro 项目模板。适合已有一套工程结构、只想借力 Kedro 数据抽象与管线能力的团队。为 Kedro 开发扩展编写自定义 Starter、插件plugin、Hooks 或自定义库组件反哺 Kedro 生态。三种方式对应三种身份Pipeline Developer面向项目、Library User面向库组件、Extension Developer面向扩展。五大组成部分总览架构文档给出了 Kedro 的顶层视图可概括为五大模块Kedro project数据管线开发者日常交互的项目结构Kedro framework连接项目与库组件的框架层Session、Context、Hooks、CLIKedro starter用于生成新项目脚手架的模板Kedro library独立可复用的核心库单元ConfigLoader、Pipeline、Runner、I/OKedro extension对 Kedro 行为的扩展机制自定义 Starter、Hooks、插件、自定义库组件。下文逐一拆解。Kedro project管线开发者的工作台作为数据管线开发者你打交道最多的是 Kedro 项目它由以下核心部分组成。conf/项目配置目录存放数据目录catalog配置与参数parameters等运行时配置按环境如base、local分层组织。注意它与settings.py的区别conf/中的是随环境变化的运行时配置而settings.py中的是应用级设置。可参考 docs/configure/configuration_basics.md 了解配置基础。src/项目源码目录pipelines/各条管线的源码。默认布局下框架会通过find_pipelines自动发现src/package/pipelines/下暴露了create_pipeline函数的模块见 kedro/framework/project/init.py 中的_create_pipeline与find_pipelines实现并自动注册为命名管线。settings.py项目应用设置包括库组件注册与自定义 Hook 注册。所有可用设置项在 docs/tutorials/settings.md 中有完整清单与说明详见下文应用设置小节。默认情况下settings.py中全部代码处于注释状态未提供时 Kedro 采用框架内置的合理默认值。pipeline_registry.py定义可通过kedro run --pipelines运行的管线集合。从源码看框架通过configure_project将pipelines对象指向f{package_name}.pipeline_registry模块并在首次访问时惰性调用其中的register_pipelines()见 kedro/framework/project/init.py 的_ProjectPipelines。__main__.py项目以包模式运行时的入口对应 docs/deploy/package_a_project.md 所描述的打包部署方式。pyproject.toml项目根标识与元数据pyproject.toml通过[tool.kedro]段标识项目根并提供项目元数据。标准模板见 kedro/templates/project/cookiecutter.json 生成的默认文件包含[tool.kedro] package_name package_name project_name project_name kedro_init_version kedro_version tools example_pipeline False source_dir srcpackage_name合法的 Python 包名必须符合 Python 包命名规范project_name人类可读的项目名kedro_init_version生成项目时使用的 Kedro 版本升级 Kedro 后应同步更新source_dir源码目录默认为src。如需改用扁平布局flat layout可将其置为空字符串source_dir 。应用设置一览settings.py支持的设置项及默认值摘自 docs/tutorials/settings.md设置项默认值用途HOOKStuple()通过项目 Hooks 在执行时间线上注入额外行为DISABLE_HOOKS_FOR_PLUGINStuple()关闭插件的 Hooks 自动注册SESSION_CLASSkedro.framework.session.KedroSession自定义 Kedro Session 的处理方式SESSION_STORE_CLASSkedro.framework.session.session.BaseSessionStore自定义 session 数据的存储方式SESSION_STORE_ARGSdict()传给SESSION_STORE_CLASS构造器的关键字参数CONTEXT_CLASSkedro.framework.context.KedroContext自定义 Kedro 库组件的管理方式CONF_SOURCEconf存放项目配置的目录CONFIG_LOADER_CLASSkedro.config.ConfigLoader自定义项目配置的加载方式CONFIG_LOADER_ARGSdict()传给CONFIG_LOADER_CLASS构造器的关键字参数DATA_CATALOG_CLASSkedro.io.DataCatalog自定义 Data Catalog 的处理方式DATASET_VALIDATIONTrue开启或关闭项目的数据集校验RUNNER_MODULE_ALLOWLISTtuple()HTTP 服务器允许导入 runner 的额外模块前缀源码层面这些设置由 kedro/framework/project/init.py 中的_ProjectSettings基于 Dynaconf 的LazySettings定义并附带校验规则例如CONTEXT_CLASS必须是KedroContext的子类、CONFIG_LOADER_CLASS必须继承自AbstractConfigLoader、DATA_CATALOG_CLASS必须实现CatalogProtocol。值得注意的是CONFIG_LOADER_ARGS的默认值为{base_env: base, default_run_env: local}与 docs/configure/configuration_basics.md 中base环境 local运行环境的约定一致。Kedro framework项目与库之间的接口层框架层是项目与库组件之间的桥梁其四个主要构件在源码中均有对应实现。kedro.framework.session管理一次 Kedro 运行的生命周期kedro.framework.session 暴露了AbstractSession、KedroSession与KedroServiceSession。其中KedroSession见 kedro/framework/session/session.py是管理 Kedro run 生命周期的核心对象负责创建 hook manager、注册 Hooks、构建 Context、执行 pipeline 并记录 session store。典型用法来自其 docstringfrom kedro.framework.session import KedroSession from kedro.framework.startup import bootstrap_project from pathlib import Path # 在 Kedro 项目之外创建 session 时需要先 bootstrap_project bootstrap_project(Path(project_root)) with KedroSession.create() as session: session.run()从AbstractSessionkedro/framework/session/abstract_session.py的抽象方法可以看出任何 Session 实现都必须提供create、close与run并支持上下文管理器协议。kedro.framework.context持有配置与核心功能kedro.framework.context 提供KedroContext、KedroContextError、CatalogCommandsMixin与compose_classes。KedroContext见 kedro/framework/context/context.py是持有配置与 Kedro 主要功能、作为与核心库组件交互的入口的基类其关键属性包括catalog只读属性基于catalog.yml含模块化管线配置构建 DataCatalog加载前会通过_convert_paths_to_absolute_posix将配置中的相对路径转换为绝对路径params只读属性返回parameters.yml中的参数并结合运行时参数与管线节点类型注解进行参数校验与转换通过kedro.validation.parameter_validator.ParameterValidator实现。从_get_catalog的实现可以看到catalog的构建链路config_loader[catalog]→ 路径绝对化 → 读取 credentials →DataCatalog.from_config(...)且当catalog_class为默认DataCatalog时还会通过compose_classes混入CatalogCommandsMixin。kedro.framework.hooks定义扩展点kedro.framework.hooks 定义了所有可用于扩展 Kedro 的 Hook 规范specifications包括节点前后、管线前后、数据集加载前后等执行阶段的钩子详见 docs/extend/hooks/introduction.md。kedro.framework.cli内置命令与插件命令加载kedro.framework.cli 定义内置 CLI 命令如kedro run、kedro jupyter等以及从插件加载自定义 CLI 命令的工具。CLI 入口实现见 kedro/framework/cli/cli.py。框架层的装配流程从 kedro/framework/project/init.py 的源码可以还原出框架装配主链路bootstrap_project定位项目根与包名configure_project(package_name)将settings指向package.settings、将pipelines指向package.pipeline_registry并设置项目日志KedroSession.create()依据settings中的SESSION_CLASS、HOOKS、CONTEXT_CLASS、CONFIG_LOADER_CLASS、DATA_CATALOG_CLASS等设置装配 Session、Hook Manager 与 Contextsession.run()通过 Context 拿到 catalog 与 pipelines交由 Runner 执行。其中pipelines是惰性加载的_ProjectPipelines目的是加快 CLI 启动速度并保证管线损坏时 CLI 其余功能如kedro -h仍可用。Kedro starter快速生成项目骨架Starter 用于生成包含样板代码的 Kedro 项目。本仓库自带项目与管线两套模板项目模板kedro/templates/project包含cookiecutter.json默认变量project_name、repo_name、python_package、kedro_version、tools、example_pipeline以及生成的目录骨架conf/、data/、docs/、notebooks/、src/、tests/、pyproject.toml等管线模板kedro/templates/pipeline提供nodes.py、pipeline.py、config/parameters_pipeline_name.yml、tests/test_pipeline.py等管线级样板。除官方 Starter 外你也可以使用自定义 Starter相关机制可参考 docs/create/starters.md。Kedro library可独立复用的四大核心单元Kedro 库由各自独立的单元组成每个单元负责数据管线计算的一个方面kedro.config.OmegaConfigLoader解析并加载 Kedro 项目配置的工具。其实现位于 kedro/config/omegaconf_config.py支持环境分层、模板化templating与凭证加载详见 docs/configure。kedro.pipeline建模数据管线的抽象集合包括Node、Pipeline以及node构造器见 kedro/pipeline/node.py 与 kedro/pipeline/pipeline.py。kedro.runner不同管线执行策略的抽象默认提供SequentialRunner、ParallelRunner与ThreadRunner见 kedro/runner 目录。kedro.io处理项目 I/O 的抽象集合包括DataCatalog与多种Dataset实现如MemoryDataset、CachedDataset、SharedMemoryDataset等见 kedro/io 目录。这些单元设计为可独立导入这正是在既有代码库中按需引入 Kedro 组件这一用法的支撑基础。Kedro extension扩展 Kedro 行为的四条路径Kedro 扩展机制允许你以四种形态扩展框架行为自定义 Starter定制项目脚手架带额外 Hook 实现的 Python 库通过HOOKS设置注册自定义 Hook额外 CLI 命令插件例如可视化工具 Kedro-Viz 这类以插件形式提供的功能Kedro 框架的 CLI 模块kedro/framework/cli提供了加载插件 CLI 命令的工具自定义库组件实现通过替换CONFIG_LOADER_CLASS、DATA_CATALOG_CLASS、SESSION_CLASS、CONTEXT_CLASS等设置接入自定义的配置加载器、数据集目录或执行上下文。其中数据集Dataset类贡献是最常被接受的类型因为这类贡献通常只落在kedro.io抽象之上无需改动框架本身。扩展开发的更多细节可参考 docs/extend/plugins.md 与 docs/extend/how_to_create_a_custom_dataset.md。架构脉络小结将上述五部分串起来Kedro 的运行主线是Starter 生成项目骨架conf/ src/ pyproject.toml │ ▼ CLI/Sessionkedro.framework.session→ bootstrap_project configure_project │ ▼ Contextkedro.framework.context持有 config_loader、catalog、params │ ▼ Pipelinekedro.pipeline← Runnerkedro.runner执行 ← DataCatalogkedro.io若你端到端采用 Kedro整套链路开箱即用若你只想要库组件直接from kedro.io import DataCatalog、from kedro.pipeline import pipeline即可若你要扩展 Kedro在settings.py注册 Hook、开发插件或替换库组件类即可无需触碰框架内核。架构文档还特别强调了对扩展贡献的开放态度任何形式的 Kedro 扩展贡献都受欢迎其中数据集类贡献最为常见因为它们不需要修改框架本身。这也从侧面印证了 Kedro 将框架、库与项目解耦的设计意图——五个组成部分各自独立、边界清晰组合起来则构成一套面向生产环境数据科学的完整工具箱。【免费下载链接】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),仅供参考