gpt4 book ai didi

jdbc - 通过 JDBC 访问非托管(外部)Azure Databricks Hive 表

转载 作者:行者123 更新时间:2023-12-01 01:42:28 24 4
gpt4 key购买 nike

我将 Azure Databricks 与 Databricks Runtime 5.2 和 Spark 2.4.0 一起使用。我以两种不同的方式设置了外部 Hive 表:
- Databricks Delta 表,其中数据存储在 Azure Data Lake Storage (ADLS) Gen 2 中,该表是使用位置设置创建的,该位置设置指向 ADLS Gen 2 中的挂载目录。
- 一个常规数据帧,作为表保存到 ADLS Gen 2,这次不使用挂载,而是使用我使用 spark.sparkContext.hadoopConfiguration 在集群级别设置的 OAuth2 凭据

挂载点和直接访问 (hadoopConfiguration) 均已使用 OAuth2 凭据和 Azure AD 服务主体进行配置,该服务主体具有对数据湖的必要访问权限。

两个表都在 Databricks UI 中正确显示并且可以查询。

这两个表在 BI 工具 (Looker) 中也可见,我已成功配置到我的 Databricks 实例的 JDBC 连接。在此之后,差异开始:

1)使用挂载点配置的表不允许我在BI工具中运行DESCRIBE操作,更不用说查询了。一切都失败并出现错误“com.databricks.backend.daemon.data.common.InvalidMountException: Error while using path/mnt/xxx/yyy/zzz to resolve path '/yyy/zzz' in mount at '/mnt/xxx'. ”

2) 使用不带挂载点配置的表允许我运行 DESCRIBE 操作,但查询失败并显示错误“java.util.concurrent.ExecutionException: java.io.IOException: There is no primary group for UGI (Basic token) (auth :简单的)”。

从 BI 工具到 Databricks 中的托管表的 JDBC 连接和查询工作正常。

据我所知,在创建外部表、配置挂载点或 OAuth2 凭据时,我无法进行任何不同的配置。在我看来,在使用 JDBC 时,挂载根本不可见,因此对底层数据源(ADLS Gen 2)的请求无法成功。另一方面,第二种情况(上面的第 2 种情况)有点令人费解,在我看来,这似乎是隐藏在引擎盖下的某处,很深,我不知道该怎么办。

一件特别的事情也是我的用户名,它出现在场景 2 中。我不知道它来自哪里,因为在使用服务主体设置 ADLS Gen 2 访问时不涉及它。

最佳答案

我有一个类似的问题,我通过在我的 Databricks 集群中添加这个参数来解决它:

spark.hadoop.hive.server2.enable.doAs false

见:https://docs.databricks.com/user-guide/faq/access-blobstore-odbc.html

RB

关于jdbc - 通过 JDBC 访问非托管(外部)Azure Databricks Hive 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55042885/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com