You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Azure Databricks Apps中用Databricks Connect连接Delta表遇问题

解决Azure Databricks Apps中Dash应用连接Delta表的上游服务器问题

针对你在Azure Databricks Apps中构建Dash应用时遇到的There was a problem connecting to the upstream server.错误,以下是具体的排查和解决方向:

1. 完善Databricks Connect的权限与认证配置

  • 确认运行Dash应用的主体(用户/服务主体)拥有目标集群的Can Attach To权限,以及Delta表所在数据库和表的SELECT权限——即使集群是无限制策略,也需要明确的权限绑定。
  • 在Azure环境下,DatabricksSession需要完整的认证信息,避免仅依赖默认认证。建议通过Databricks Secrets管理令牌,修改连接代码:
    spark = DatabricksSession.builder.remote(
        host       = "https://adb-xxxxxxx.azuredatabricks.net",
        cluster_id = "xxxx-xxxxxx-xxxxxxx",
        token      = dbutils.secrets.get("你的密钥范围", "存储的令牌名")
    ).getOrCreate()
    
    注意:不要硬编码令牌,必须使用密钥管理保护敏感信息。

2. 改为懒加载模式避免启动阻塞

当前代码在应用初始化阶段就直接拉取Delta表数据,可能因Spark连接超时、数据量过大导致应用启动时阻塞,引发上游连接错误。改为按钮触发的回调加载:

import pandas as pd
from dash import Dash, dcc, html, dash_table, Input, Output
import dash_bootstrap_components as dbc
from databricks.connect import DatabricksSession

dash_app = Dash(__name__, external_stylesheets=[dbc.themes.BOOTSTRAP])

def get_delta_data():
    # 延迟创建Spark会话,避免启动时占用资源
    spark = DatabricksSession.builder.remote(
        host       = "https://adb-xxxxxxx.azuredatabricks.net",
        cluster_id = "xxxx-xxxxxx-xxxxxxx",
        token      = dbutils.secrets.get("secret_scope", "db_token")
    ).getOrCreate()
    delta_df = spark.sql("SELECT * FROM myTable")
    pandas_df = delta_df.toPandas()
    spark.stop()  # 用完释放会话资源
    return pandas_df

dash_app.layout = html.Div(children=[
    html.H3('App'),
    html.Button('加载数据', id='load-data-btn', n_clicks=0),
    dash_table.DataTable(
        id='db_table',
        columns=[],
        data=[],
        page_size=10
    )
])

@dash_app.callback(
    [Output('db_table', 'columns'), Output('db_table', 'data')],
    Input('load-data-btn', 'n_clicks'),
    prevent_initial_call=True
)
def load_table(n_clicks):
    df = get_delta_data()
    return [{'name': i, 'id': i} for i in df.columns], df.to_dict("records")

if __name__ == '__main__':
    dash_app.run_server(debug=True)

3. 检查集群与网络状态

  • 确认目标集群处于运行中状态,没有因闲置超时自动停止,也没有资源不足的告警。
  • 验证Databricks Apps和集群的网络连通性:如果二者不在同一VNet,需要配置VNet对等连接或防火墙规则,确保流量能正常互通。

4. 查看应用日志定位细节

在Databricks Apps的部署页面,找到应用的日志入口,查看更详细的错误栈信息——比如是否是Spark连接超时、权限验证失败或数据拉取时的内存溢出,这些日志能直接指向问题根源。

内容的提问来源于stack exchange,提问作者user3626232

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 11:35:07