在不使用群集的情况下将Azure Blob存储挂载到Azure Databricks

问题描述

我们有一个要求,即在Azure DevOps中通过CI / CD管道配置Databricks服务时,我们应该能够将blob存储安装到DBFS,而无需连接到群集。是否可以使用Azure DevOps的bash脚本将对象存储安装到DBFS群集?

我浏览了各种论坛,但他们都提到使用 dbutils.fs.mount 进行此操作,但问题是我们无法在Azure DevOps CI / CD管道中运行此命令。

将对此表示感谢。

谢谢

解决方法

您的要求是可能的,但这需要一些额外的工作。在我们的组织中,我们尝试了各种方法,而我与Databricks合作已经有一段时间了。最适合我们的解决方案是编写一个bash脚本,该脚本利用Azure Devops管道中的databricks-cli。我们采用的方法如下:

  1. 使用令牌API检索Databricks令牌
  2. 在CI / CD管道中配置Databricks CLI
  3. 使用Databricks CLI上传安装脚本
  4. 使用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。有关更多信息,请参见以下链接:

https://docs.databricks.com/data/data-sources/azure/azure-datalake-gen2.html#mount-azure-data-lake-storage-gen2-filesystem

上传安装脚本
在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模板来填充特定于环境或项目的变量。

希望这对您有所帮助。让我知道您是否有任何疑问!