如何在Databricks Hive元数据存储中创建带ADLS路径的数据库(无需挂载)
解决Databricks指定ABFSS路径创建数据库的配置异常问题
错误原因
执行指定ABFSS路径创建Hive数据库时出现的KeyProviderException,本质是Databricks未正确配置访问目标ADLS Gen2存储的认证参数与权限,导致无法初始化存储访问配置。
解决方案
1. 配置ADLS存储的访问权限
- 服务主体(Service Principal):给目标服务主体分配存储Blob数据参与者(或按需分配只读/读写权限)角色,作用范围可设为存储账户或具体容器。
- 托管标识:若使用Databricks工作区的系统/用户托管标识,同样给该标识分配对应存储角色。
2. 在Databricks中配置存储认证参数
无需挂载存储,可通过会话级SQL命令或集群Spark配置添加以下参数:
服务主体认证方式
-- 替换stgaccount为你的存储账户名,以下参数替换为实际值 SET spark.hadoop.fs.azure.account.auth.type.stgaccount.dfs.core.windows.net=OAuth; SET spark.hadoop.fs.azure.account.oauth.provider.type.stgaccount.dfs.core.windows.net=org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider; SET spark.hadoop.fs.azure.account.oauth2.client.id.stgaccount.dfs.core.windows.net=<服务主体客户端ID>; SET spark.hadoop.fs.azure.account.oauth2.client.secret.stgaccount.dfs.core.windows.net=<服务主体客户端密钥>; SET spark.hadoop.fs.azure.account.oauth2.endpoint.stgaccount.dfs.core.windows.net=https://login.microsoftonline.com/<租户ID>/oauth2/token;
托管标识认证方式
-- 替换stgaccount为你的存储账户名 SET spark.hadoop.fs.azure.account.auth.type.stgaccount.dfs.core.windows.net=OAuth; SET spark.hadoop.fs.azure.account.oauth.provider.type.stgaccount.dfs.core.windows.net=org.apache.hadoop.fs.azurebfs.oauth2.MsiTokenProvider; -- 若使用用户托管标识,需添加此行并替换为标识的客户端ID -- SET spark.hadoop.fs.azure.account.oauth2.client.id.stgaccount.dfs.core.windows.net=<用户托管标识客户端ID>;
3. 重新执行数据库创建命令
完成上述配置后,运行原SQL语句即可:
create database if not exists adb_raw location "abfss://container@stgaccount.dfs.core.windows.net/01_RAW/flat_files/"
额外注意事项
- 确保存储账户防火墙规则允许Databricks工作区访问(可添加Databricks IP范围,或开启"允许受信任的Microsoft服务访问此存储账户")。
- 若使用高级存储账户,确认无额外访问限制策略。
内容的提问来源于stack exchange,提问作者Pirvu Georgian
相关产品推荐
相关产品推荐

