【问题标题】:Kedro deployment to databricksKedro 部署到数据块
【发布时间】:2020-01-20 19:20:59
【问题描述】:

也许我误解了打包的目的,但它似乎对创建用于生产部署的工件没有帮助,因为它只打包代码。它省略了 conf、data 和其他使 kedro 项目可重现的目录。

我知道我可以使用 docker 或气流插件进行部署,但如何部署到数据块。你有什么建议吗?

我正在考虑制作一个可以安装在集群上的轮子,但我需要先打包 conf。另一种选择是将 git 工作区同步到集群并通过笔记本运行 kedro。

对最佳实践有什么想法吗?

【问题讨论】:

    标签: kedro


    【解决方案1】:

    如果您不使用docker,而只是使用kedro 直接部署在databricks 集群上。这就是我们将 kedro 部署到数据块的方式。

    1. CI/CD 管道使用 kedro package 构建。创建一个轮子文件。

    2. distconf 上传到 dbfs 或 AzureBlob 文件副本(如果使用 Azure Databricks)

    这会将所有内容上传到每个 git push 上的数据块

    那么你就可以拥有一个笔记本,里面有以下内容:

    1. 您可以在 databricks 中有一个初始化脚本,例如:
    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()
    
    

    这里confcatalogpipeline将可用

    1. 当您想在生产环境中运行分支或master 分支时调用此初始化脚本,例如:
      %run "/Projects/InitialSetup/load_pipeline" $branch="master"

    2. 对于开发和测试,可以运行特定节点
      pipeline = pipeline.only_nodes_with_tags(*tags)

    3. 然后仅使用 SequentialRunner().run(pipeline, catalog) 运行完整或部分管道

    在生产中,此笔记本可以通过数据块进行调度。如果你在 Azure Databricks 上,可以使用 Azure Data Factory 来安排和运行它。

    【讨论】:

    • 您如何处理将生产配置文件与其所需的凭据相结合的问题?我在想只是设置它们 env vars 但我不知道 kedro 是否处理用 env vars 覆盖来自 conf 的那些。
    • 我想在我看来,将所有承诺 git 的 conf、数据等打包到轮子中会很好,这样我们就不必构建一些自定义dbfs 副本。不能只添加要打包的 setup.py 的路径吗?
    • 我认为 Kedro 不会在 conf 上查看环境变量。 Kedro 只查看conf 中的credentials** 文件。对于生产凭据,您可以在您的 /dbfs/project_name/ 路径所在的 conf 中创建一个 credentials 文件。只有从 S3 读取时,才会有环境变量。或者您也可以在 ProjectContext 上编写一个初始化,扩展 KedroContextdef __init__(self, project_path: Union[Path, str]): super().__init__(project_path, extra_params=dict( creds=os.environ.get('pwd') )) 这将替换 ConfigLoader creds param
    • 我认为不鼓励打包data 和凭据conf 并打包它们。 kedro.readthedocs.io/en/latest/04_user_guide/… 您的数据可能位于共享文件系统上,例如dbfs。除了credentials 之外的conf 文件副本可以作为kedro package 的一部分发生
    • 是的,我不会打包凭据,而只会打包其他 conf。数据打包似乎并不气馁,我可以看到它对一些小型数据集有什么用处。再次感谢您的帮助!
    【解决方案2】:

    因此,文档中有一部分涉及 Databricks:

    https://kedro.readthedocs.io/en/latest/04_user_guide/12_working_with_databricks.html

    最简单的入门方法可能是与 git 同步并通过 Databricks 笔记本运行。但是,如前所述,还有其他方法可以使用“.whl”并引用“conf”文件夹。

    【讨论】:

    • 您参考的文档可用于开发,但不适用于同步和运行生产管道。特别是,生产凭据需要来自某个地方,并且没有解决加载集群上的所有依赖项的问题。
    【解决方案3】:

    我发现最好的选择是使用另一个工具来打包、部署和运行作业。将 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 运行 -b 数据块 -c cluster.json 。 -P env="staging" --experiment-name /test/exp

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-03
      • 2022-11-02
      • 2019-01-24
      • 2022-01-17
      • 1970-01-01
      相关资源
      最近更新 更多