开发 Databricks 应用
注意
若要在 Databricks 工作区中部署和运行应用,必须确保防火墙不会阻止域 *.databricksapps.com
。
本文详细介绍了如何使用 Databricks 应用创建数据和 AI 应用,包括如何在 UI 中创建和编辑应用、如何使用 SQL 仓库、机密和 Databricks 作业等 Databricks 平台功能、开发应用的最佳做法,以及有关使用受支持框架开发应用的重要信息。
如何实现在 Databricks 应用 UI 中创建应用?
在边栏中,单击“新建”,然后从菜单中选择“应用”。
可以从完整的预生成示例应用开始,也可以使用源代码和项目。
- 若要从示例应用开始,请选择“模板”,单击首选框架的选项卡,然后从应用列表中选择。
- 若要使用代码创建应用,请选择“ 自定义”。
单击 “下一步” 。
在 “应用名称 ”字段中,输入应用的名称,并根据需要输入说明。
注意
- 创建应用后,无法更改分配给 Databricks 应用的名称,任何有权访问 Azure Databricks 工作区的用户都可以查看工作区中所有 Databricks 应用的名称和部署历史记录。 此外,应用名称包含在写入系统表的记录中。 由于这种可见性,命名 Databricks 应用时不应包含敏感信息。
- 该名称在托管应用的 Azure Databricks 工作区中必须唯一,并且必须仅包含小写字母、数字和连字符。
如果选择了“ 自定义”,请单击“ 创建应用”。 如果选择了 “模板”,请配置所需的资源,然后单击“ 创建并部署应用”。 请参阅 将 Databricks 平台功能分配给 Databricks 应用。
单击“创建并部署应用”或“创建应用”后,将显示应用详细信息页。 如果选择了 模板,Databricks 应用会创建应用,然后部署应用,包括模板中的示例代码和应用的必需配置。 应用的详细信息页显示:
- 应用的创建和部署的状态。
- 可用于在本地继续开发应用的步骤,包括将应用项目复制到本地环境,并将本地更改同步回 Azure Databricks 工作区。
如果选择“ 自定义”,Databricks Apps 将创建应用。 由于必须为应用添加代码和项目,因此必须将应用部署为单独的步骤。 应用的详细信息页显示:
- 应用的创建状态。
- 可用于将应用的代码和项目从本地开发环境同步到 Azure Databricks 工作区并部署应用的步骤。
若要了解如何设置本地开发环境、在本地创建或更新应用的代码和配置,以及同步应用并将其部署到 Azure Databricks 工作区,请参阅 Databricks 应用入门。
如果选择了 模板 ,并且想要将应用项目从工作区复制到本地开发环境,则可以使用 Databricks CLI:
databricks workspace export-dir <workspace-path> <target-path>
将:
<workspace-path>
包含应用代码和项目的工作区文件目录的路径。<target-path>
使用本地环境中的路径将文件复制到其中。
将 Databricks 平台功能分配给 Databricks 应用
注意
若要使用 Databricks SQL,服务主体需要访问 SQL 仓库和查询访问的任何表。
若要使用 Databricks 平台的功能(如 Databricks SQL、Databricks 作业、马赛克 AI 模型服务和 Databricks 机密),请将这些功能作为资源添加到应用。 创建或编辑应用时,可以添加资源。
在“创建新应用”或“编辑应用卡”中,单击“高级设置>+ 添加资源”,然后选择资源类型。
根据资源类型,完成配置资源所需的字段,包括 “资源密钥 ”字段。 此密钥稍后用于引用资源。
单击“ 保存”。
使用 SQL 仓库资源密钥在配置文件中添加
app.yaml
资源的条目。 由于这是引用参数值的源而不是实际值,因此请使用valueFrom
而不是value
。env: - name: "DATABRICKS_WAREHOUSE_ID" valueFrom: "sql-warehouse"
若要引用应用代码中的资源,请使用字段的值
name
(DATABRICKS_WAREHOUSE_ID
在此示例中)引用配置的键值。import os os.getenv('DATABRICKS_WAREHOUSE_ID')
若要查看将资源用于应用(包括 SQL 仓库和模型服务终结点)的更多示例,请参阅创建应用和最佳做法时的模板示例:使用机密存储 Databricks 应用的敏感信息。
查看 Databricks 应用的详细信息
若要查看 Databricks 应用的详细信息页,请执行以下操作:
- 单击侧栏中的“ 计算”。
- 转到 “应用 ”选项卡。
- 在“ 名称 ”列中,单击应用名称。
- 此时 会显示“概述 ”选项卡,其中包含应用的详细信息,包括其状态、部署位置和任何关联的资源。
- 若要访问应用的部署历史记录,请转到 “部署 ”选项卡。
- 若要查看应用的日志,请转到 “日志 ”选项卡。
- 若要查看应用的运行时环境(包括环境变量和已安装的包),请转到“ 环境 ”选项卡。
为 Databricks 应用配置权限
若要管理应用的权限,必须具有 CAN MANAGE
或 IS OWNER
权限。
- 在应用详细信息页上,单击“ 权限”。
- 在 “权限设置”中 ,选择“选择用户、组或服务主体...” 下拉菜单,然后选择用户、组、服务主体或所有工作区用户。
- 从“权限”下拉菜单中选择权限。
- 单击“添加”,然后单击“保存”。
维护 Databricks 应用的状态
当应用重启时,应用在内存中维护的任何状态都将丢失。 如果应用需要在重启之间保持状态,请在外部存储状态。 例如,应用可以使用 Databricks SQL、 工作区文件或 Unity 目录卷 来保留状态。
Databricks 应用中的日志记录
注意
若要在 Databricks 应用 UI 或应用 URL 中查看日志,应用必须登录和stderr
登录stdout
。
若要查看应用的标准输出和标准错误,请在应用的详细信息页上单击“ 日志 ”选项卡。请参阅 查看 Databricks 应用的详细信息。
还可以在链接中 <appurl>/logz
查看标准输出和标准错误日志。 例如,如果应用的 URL 是 https://my-app-1234567890.my-instance.databricksapps.com
,则可以在以下位置 https://my-app-1234567890.my-instance.databricksapps.com/logz
查看日志。 若要查找应用 URL,请转到应用详细信息页。
为 Databricks 应用指定库依赖项
如果应用需要随部署安装的自动安装的包以外的 Python 库,请使用 requirements.txt
文件来定义这些库。 如果文件中的包 requirements.txt
复制了其中一个自动安装的包,则包 requirements.txt
中的版本将替代自动安装的包。
有关作为应用部署的一部分安装的包和版本的列表,请参阅 已安装的 Python 库。
哪些 HTTP 标头传递到 Databricks 应用?
X-Forwarded-*
以下标头从 Databricks Apps 反向代理传递到应用:
Header | 说明 |
---|---|
X-Forwarded-Host |
客户端请求的原始主机或域。 |
X-Forwarded-Preferred-Username |
IdP 提供的用户名。 |
X-Forwarded-User |
IdP 提供的用户标识符。 |
X-Forwarded-Email |
IdP 提供的用户电子邮件。 |
X-Real-Ip |
发出原始请求的客户端的 IP 地址。 |
X-Request-Id |
请求的 UUID。 |
Databricks Apps 支持哪些框架?
可以使用大多数 Python 框架来开发应用。 若要查看使用特定框架(包括 Dash、Gradio 和 Streamlit)的示例,请在 UI 中创建新应用时从模板应用的库中进行选择。 请参阅如何实现在 Databricks 应用 UI 中创建应用?
有关 Databricks Apps 运行时环境中设置的特定于 Streamlit 的变量,请参阅 Streamlit 的默认环境变量。
最佳做法:使用机密存储 Databricks 应用的敏感信息
Databricks 建议使用机密来存储敏感信息,例如身份验证凭据。 若要了解有关使用机密的详细信息,请参阅 “管理机密”。
若要对应用使用机密,请执行以下操作:
将机密配置为 应用资源。
在应用的配置文件中添加机密的
app.yaml
条目。env: - name: "API_TOKEN" valueFrom: "api-token-value"
若要在应用代码中引用机密,请使用字段的值
name
(API_TOKEN
在此示例中)引用配置的键值。
token = os.getenv('API_TOKEN')
最佳做法:使用 Azure Databricks 功能进行处理
Databricks Apps 计算专为提供 UI 而设计。 为了确保应用能够有效地支持多个用户,应使用 Databricks 功能执行除简单数据处理以外的任何操作。 例如,使用 Databricks SQL 查询处理和存储数据集、用于数据处理的 Databricks 作业或用于查询 AI 模型的模型。
最佳做法:遵循安全编码最佳做法
Databricks 建议在开发应用时遵循安全编码做法,包括参数化查询以避免 SQL 注入攻击。 请参阅语句执行 API。
有关实现 Databricks 应用的重要准则
- Databricks Apps 在收到
SIGTERM
信号后 15 秒发送信号SIGKILL
,因此应用在收到SIGTERM
信号后应正常关闭不超过 15 秒。 如果应用在 15 秒后未退出,则会发送一个SIGKILL
信号以终止进程和所有子进程。 - 由于 Databricks Apps 作为非特权系统用户运行,因此无法执行需要在特权安全上下文中运行的操作,例如需要根用户权限的操作。
- 请求是从反向代理转发的,因此应用不得依赖于请求的来源。 Databricks Apps 环境为支持的框架设置所需的配置参数。
- 由于 Databricks 应用框架管理传输层安全性(TLS)连接,因此应用不得执行任何 TLS 连接或握手操作。
- 应用必须实现以 HTTP/2 明文(H2C)格式处理请求。
- Databricks 应用必须在其上
0.0.0.0
托管 HTTP 服务器,并使用环境变量中指定的DATABRICKS_APP_PORT
端口号。 请参阅 环境变量。