什么是好的 Databricks 工作流程
Posted
技术标签:
【中文标题】什么是好的 Databricks 工作流程【英文标题】:What is a good Databricks workflow 【发布时间】:2020-03-08 09:08:10 【问题描述】:我正在使用 Azure Databricks 通过笔记本和管道进行数据处理。
我对当前的工作流程不满意:
生产中使用的笔记本不能在不中断生产的情况下进行修改。当我想开发更新时,我复制笔记本,更改源代码直到我满意,然后用我的新笔记本替换生产笔记本。 我的浏览器不是 IDE!我不能轻易进入函数定义。我有很多笔记本,如果我想修改甚至只是看一个函数的文档,我需要切换到定义了这个函数的笔记本。 有没有办法进行高效和系统的测试? Git 集成非常简单,但这不是我主要关心的问题。【问题讨论】:
【参考方案1】:很好的问题。绝对不要修改您的生产代码。
一种推荐的模式是在工作区中为 dev-staging-prod 保留单独的文件夹。完成您的开发工作,然后在最终升级到生产之前在 staging 中运行测试。
您可以使用 Databricks CLI 将笔记本从一个文件夹拉取和推送到另一个文件夹,而不会破坏现有代码。更进一步,您可以将此模式与 git 结合以与版本控制同步。在任何一种情况下,CLI 都可以让您以编程方式访问工作区,这样可以更轻松地更新生产作业的代码。
关于您关于 IDE 的第二点 - Databricks 提供了Databricks Connect,让您可以在集群上运行命令时使用您的 IDE。根据您的痛点,我认为这对您来说是一个很好的解决方案,因为它可以让您更多地了解您定义的功能等等。您也可以通过这种方式编写和运行单元测试。
准备好脚本后,您可以随时将它们作为笔记本导入工作区并作为作业运行。还知道您可以使用 REST API 将 .py 脚本作为作业运行。
【讨论】:
非常感谢,我一定会调查的! 你说 CLI 可以用来推拉——我正在想办法做到这一点,你介意回答***.com/q/70176862/15629542吗?【参考方案2】:我个人更喜欢打包自己的代码,将*.whl包复制到DBFS,在那里我可以安装测试过的包并导入。
编辑:更明确。
在不中断生产的情况下不能修改生产中使用的笔记本。当我想开发更新时,我复制笔记本,更改源代码直到我满意,然后用我的新笔记本替换生产笔记本。
这可以通过使用单独的环境 DEV/TST/PRD 来解决。或者拥有可以单独修改的版本化包。我稍后会澄清。
我的浏览器不是 IDE!我不能轻易进入函数定义。我有很多笔记本,如果我想修改甚至只是查看一个函数的文档,我需要切换到定义了这个函数的笔记本。 有没有办法进行高效和系统的测试?
是的,使用我提到的版本化包方法并结合 databricks-connect,您完全可以使用您的 IDE、实施测试、进行适当的 git 集成。
Git 集成非常简单,但这不是我主要关心的问题。
在更大的团队中工作时,内置的 git 集成实际上非常糟糕。您不能同时在同一个笔记本中进行开发,因为与您的同事共享的更改是平坦且线性的累积。除此之外,您必须链接和取消链接容易出现人为错误的存储库,导致您的笔记本在错误的文件夹中同步,导致由于无法导入笔记本而导致运行中断。我建议你也使用我的包装解决方案。
打包方案如下Reference:
-
列表项
在您的桌面上,安装 pyspark
下载一些匿名数据以使用
使用少量数据开发代码,编写单元测试
准备好测试大数据时,卸载 pyspark,安装 databricks-connect
当性能和集成足够时,将代码推送到您的远程仓库
创建运行自动化测试并构建版本化包的构建管道
创建将版本化包复制到 DBFS 的发布管道
在“runner notebook”中接受“process_date”和“data folder/filepath”作为参数,并从您的版本化包中导入模块
将参数传递给您的模块以运行您的测试代码
【讨论】:
您能在此处添加您的指南吗?我们尝试构建内容主体,而不仅仅是其他地方的引用,这些引用有时会消失。【参考方案3】:我们的做法 -
-将开发笔记本与 Azure DevOps 集成。
-为笔记本、作业、包和集群部署创建自定义构建和部署任务。使用 DatabBricks RestAPI 很容易做到这一点
https://docs.databricks.com/dev-tools/api/latest/index.html
为测试、暂存和生产部署创建发布管道。 -部署测试和测试。 -部署在登台和测试上。 -部署在生产中
希望这会有所帮助。
【讨论】:
以上是关于什么是好的 Databricks 工作流程的主要内容,如果未能解决你的问题,请参考以下文章
什么是好的,基于windows和iis(http)的分布式版本控制系统[关闭]