Kedro 部署到数据块
Kedro deployment to databricks
也许我误解了打包的目的,但它似乎对创建用于生产部署的工件没有帮助,因为它只打包代码。它省略了使 kedro 项目可重现的 conf、数据和其他目录。
我知道我可以使用 docker 或气流插件进行部署,但是如何部署到数据块呢?你有什么建议吗?
我正在考虑制作一个可以安装在集群上的轮子,但我需要先打包 conf。另一种选择是通过笔记本将 git 工作区同步到集群和 运行 kedro。
有什么最佳做法吗?
所以文档中有一部分是关于 Databricks 的:
https://kedro.readthedocs.io/en/latest/04_user_guide/12_working_with_databricks.html
最简单的入门方法可能是通过 Databricks 笔记本与 git 和 运行 同步。但是,如前所述,还有其他使用“.whl”并引用 "conf" 文件夹的方法。
如果您不使用 docker
并且只是使用 kedro 直接部署在数据块集群上。这就是我们将 kedro 部署到数据块的方式。
CI/CD 管道构建使用 kedro package
。创建一个 wheel 文件。
上传 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
分支时调用这个初始化脚本,例如:
%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="staging" --experiment-name /test/exp
也许我误解了打包的目的,但它似乎对创建用于生产部署的工件没有帮助,因为它只打包代码。它省略了使 kedro 项目可重现的 conf、数据和其他目录。
我知道我可以使用 docker 或气流插件进行部署,但是如何部署到数据块呢?你有什么建议吗?
我正在考虑制作一个可以安装在集群上的轮子,但我需要先打包 conf。另一种选择是通过笔记本将 git 工作区同步到集群和 运行 kedro。
有什么最佳做法吗?
所以文档中有一部分是关于 Databricks 的:
https://kedro.readthedocs.io/en/latest/04_user_guide/12_working_with_databricks.html
最简单的入门方法可能是通过 Databricks 笔记本与 git 和 运行 同步。但是,如前所述,还有其他使用“.whl”并引用 "conf" 文件夹的方法。
如果您不使用 docker
并且只是使用 kedro 直接部署在数据块集群上。这就是我们将 kedro 部署到数据块的方式。
CI/CD 管道构建使用
kedro package
。创建一个 wheel 文件。上传
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
分支时调用这个初始化脚本,例如:%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="staging" --experiment-name /test/exp