问题描述
我们有一个要求,即在Azure DevOps中通过CI / CD管道配置Databricks服务时,我们应该能够将blob存储安装到DBFS,而无需连接到群集。是否可以使用Azure DevOps的bash脚本将对象存储安装到DBFS群集?
我浏览了各种论坛,但他们都提到使用 dbutils.fs.mount 进行此操作,但问题是我们无法在Azure DevOps CI / CD管道中运行此命令。
将对此表示感谢。
谢谢
解决方法
您的要求是可能的,但这需要一些额外的工作。在我们的组织中,我们尝试了各种方法,而我与Databricks合作已经有一段时间了。最适合我们的解决方案是编写一个bash脚本,该脚本利用Azure Devops管道中的databricks-cli。我们采用的方法如下:
- 使用令牌API检索Databricks令牌
- 在CI / CD管道中配置Databricks CLI
- 使用Databricks CLI上传安装脚本
- 使用Jobs API创建Databricks作业,并将安装脚本设置为要执行的文件
以上步骤都包含在bash脚本中,该脚本是我们Azure Devops管道的一部分。
设置CLI
由于您可以使用令牌API生成临时访问令牌,因此无需任何手动步骤即可设置Databricks CLI。我们使用服务主体进行身份验证。
https://docs.microsoft.com/en-US/azure/databricks/dev-tools/api/latest/tokens
创建安装脚本
我们有一个遵循安装说明的scala脚本。这也可以是Python。有关更多信息,请参见以下链接:
上传安装脚本
在Azure Devops管道中,通过使用令牌API创建临时令牌来配置databricks-cli。完成此步骤后,我们可以自由使用CLI将安装脚本上传到DBFS或使用Workspace API将其作为笔记本导入。
https://docs.microsoft.com/en-US/azure/databricks/dev-tools/api/latest/workspace#--import
配置实际装载存储的作业
我们有一个JSON文件,该文件定义了执行“装载存储”脚本的作业。您可以定义作业以使用上一步中上载的脚本/笔记本。您可以使用JSON轻松定义作业,并在Jobs API文档中查看其工作方式:
https://docs.microsoft.com/en-US/azure/databricks/dev-tools/api/latest/jobs#--
这时,触发作业应创建一个临时集群,该集群将为您装载存储。您无需使用网络界面或执行任何手动步骤。
您也可以将这种方法应用于不同的环境和资源组。为此,我们利用Jinja模板来填充特定于环境或项目的变量。
希望这对您有所帮助。让我知道您是否有任何疑问!