也许我误解了打包的目的,但它似乎对创建用于生产部署的工件没有帮助,因为它只打包代码。它省略了使 kedro 项目可重现的 conf、数据和其他目录。
我知道我可以使用 docker 或气流插件进行部署,但是部署到数据砖呢?你在这里有什么建议吗?
我正在考虑制作一个可以安装在集群上的轮子,但我需要先打包 conf。另一种选择是将 git 工作区同步到集群,并通过笔记本运行 kedro。
对最佳实践有什么想法吗?
如果您不使用docker
而只是使用 kedro 直接在 databricks 集群上部署。这就是我们将 kedro 部署到数据砖块的方式。
-
使用
kedro package
生成 CI/CD 管道。创建滚轮文件。 -
将
dist
和conf
上传到 dbfs 或 AzureBlob 文件副本(如果使用 Azure Databricks(
这会将所有内容上传到每个git push
的数据砖
然后,您可以拥有一个包含以下内容的笔记本:
- 您可以在数据砖块中有一个初始化脚本,如下所示:
from cargoai import run
from cargoai.pipeline import create_pipeline
branch = dbutils.widgets.get("branch")
conf = run.get_config(
project_path=f"/dbfs/project_name/build/cicd/{branch}"
)
catalog = run.create_catalog(config=conf)
pipeline = create_pipeline()
这里将提供conf
、catalog
和pipeline
当您想在生产环境中运行分支或
master
分支时,请调用此 init 脚本,例如:%run "/Projects/InitialSetup/load_pipeline" $branch="master"
对于开发和测试,您可以运行特定节点
pipeline = pipeline.only_nodes_with_tags(*tags)
然后运行完整或部分管道,只需
SequentialRunner().run(pipeline, catalog)
在生产环境中,此笔记本可以由数据砖计划。如果你使用的是 Azure Databricks,则可以使用Azure Data Factory
来计划和运行此任务。
我发现最好的选择是使用另一个工具来打包、部署和运行作业。 将 mlflow 与 kedro 一起使用似乎很合适。 我在 Kedro 中做了几乎所有事情,但使用 MLFlow 进行打包和作业执行:https://medium.com/@QuantumBlack/deploying-and-versioning-data-pipelines-at-scale-942b1d81b5f5
name: My Project
conda_env: conda.yaml
entry_points:
main:
command: "kedro install && kedro run"
然后运行它:
mlflow run -b databricks -c cluster.json . -P env="stageaging" --experiment-name/test/exp
因此,文档中有一部分涉及Databricks:
https://kedro.readthedocs.io/en/latest/04_user_guide/12_working_with_databricks.html
最简单的入门方法可能是与 git 同步并通过 Databricks 笔记本运行。但是,如前所述,还有其他方法可以使用".whl"并引用"conf"文件夹。