【问题标题】:What is a good Databricks workflow什么是好的 Databricks 工作流程
【发布时间】:2020-03-08 09:08:10
【问题描述】:

我正在使用 Azure Databricks 通过笔记本和管道进行数据处理。

我对当前的工作流程不满意:

  • 生产中使用的笔记本不能在不中断生产的情况下进行修改。当我想开发更新时,我复制笔记本,更改源代码直到我满意,然后用我的新笔记本替换生产笔记本。
  • 我的浏览器不是 IDE!我不能轻易进入函数定义。我有很多笔记本,如果我想修改甚至只是看一个函数的文档,我需要切换到定义了这个函数的笔记本。
  • 有没有办法进行高效和系统的测试?
  • Git 集成非常简单,但这不是我主要关心的问题。

【问题讨论】:

    标签: azure azure-databricks


    【解决方案1】:

    很好的问题。绝对不要修改您的生产代码。

    一种推荐的模式是在工作区中为 dev-staging-prod 保留单独的文件夹。完成您的开发工作,然后在最终升级到生产之前在 staging 中运行测试。

    您可以使用 Databricks CLI 将笔记本从一个文件夹拉取和推送到另一个文件夹,而不会破坏现有代码。更进一步,您可以将此模式与 git 结合以与版本控制同步。在任何一种情况下,CLI 都可以让您以编程方式访问工作区,这样可以更轻松地更新生产作业的代码。

    关于您关于 IDE 的第二点 - Databricks 提供了Databricks Connect,让您可以在集群上运行命令时使用您的 IDE。根据您的痛点,我认为这对您来说是一个很好的解决方案,因为它可以让您更多地了解您定义的功能等等。您也可以通过这种方式编写和运行单元测试。

    准备好脚本后,您可以随时将它们作为笔记本导入工作区并作为作业运行。还知道您可以使用 REST API 将 .py 脚本作为作业运行。

    【讨论】:

    【解决方案2】:

    我个人更喜欢打包自己的代码,将*.whl包复制到DBFS,在那里我可以安装测试过的包并导入。

    编辑:更明确。

    在不中断生产的情况下不能修改生产中使用的笔记本。当我想开发更新时,我复制笔记本,更改源代码直到我满意,然后用我的新笔记本替换生产笔记本。

    这可以通过使用单独的环境 DEV/TST/PRD 来解决。或者拥有可以单独修改的版本化包。我稍后会澄清。

    我的浏览器不是 IDE!我不能轻易进入函数定义。我有很多笔记本,如果我想修改甚至只是查看一个函数的文档,我需要切换到定义了这个函数的笔记本。 有没有办法进行高效和系统的测试?

    是的,使用我提到的版本化包方法并结合 databricks-connect,您完全可以使用您的 IDE、实施测试、进行适当的 git 集成。

    Git 集成非常简单,但这不是我主要关心的问题。

    在更大的团队中工作时,内置的 git 集成实际上非常糟糕。您不能同时在同一个笔记本中进行开发,因为与您的同事共享的更改是平坦且线性的累积。除此之外,您必须链接和取消链接容易出现人为错误的存储库,导致您的笔记本在错误的文件夹中同步,导致由于无法导入笔记本而导致运行中断。我建议你也使用我的包装解决方案。

    打包方案如下Reference:

    1. 列表项
    2. 在您的桌面上,安装 pyspark
    3. 下载一些匿名数据以使用
    4. 使用少量数据开发代码,编写单元测试
    5. 准备好测试大数据时,卸载 pyspark,安装 databricks-connect
    6. 当性能和集成足够时,将代码推送到您的远程仓库
    7. 创建运行自动化测试并构建版本化包的构建管道
    8. 创建将版本化包复制到 DBFS 的发布管道
    9. 在“runner notebook”中接受“process_date”和“data folder/filepath”作为参数,并从您的版本化包中导入模块
    10. 将参数传递给您的模块以运行您的测试代码

    【讨论】:

    • 您能在此处添加您的指南吗?我们尝试构建内容主体,而不仅仅是其他地方的引用,这些引用有时会消失。
    【解决方案3】:

    我们的做法 -

    -将开发笔记本与 Azure DevOps 集成。

    -为笔记本、作业、包和集群部署创建自定义构建和部署任务。使用 DatabBricks RestAPI 很容易做到这一点

    https://docs.databricks.com/dev-tools/api/latest/index.html

    为测试、暂存和生产部署创建发布管道。 -部署测试和测试。 -部署在登台和测试上。 -部署在生产中

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2011-07-13
      • 1970-01-01
      • 2011-06-13
      • 2019-01-07
      • 2023-02-21
      • 2017-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多