4

我正在尝试使用服务主体从 Databricks 连接到 Synapse。我已经在集群配置中配置了服务主体

fs.azure.account.auth.type.<datalake>.dfs.core.windows.net OAuth
fs.azure.account.oauth.provider.type org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider
fs.azure.account.oauth2.client.id <Service Principal ID/Application ID>
fs.azure.account.oauth2.client.secret <Client secret key/Service Principal Password>
fs.azure.account.oauth2.client.endpoint https://login.microsoftonline.com/<tenant-id>/oauth2/token
fs.azure.createRemoteFileSystemDuringInitialization true

虽然我可以成功连接到 DataLake 并工作,但当我使用以下命令时,我无法写入突触......

DummyDF.write.format("com.databricks.spark.sqldw")\
.mode("append")\
.option("url", jdbcUrl)\
.option("useAzureMSI", "true")\
.option("tempDir",tempdir)\
.option("dbTable", "DummyTable").save()

我收到以下错误...

Py4JJavaError: An error occurred while calling o831.save.
: com.databricks.spark.sqldw.SqlDWSideException: SQL DW failed to execute the JDBC query produced by the connector.
Underlying SQLException(s):
com.microsoft.sqlserver.jdbc.SQLServerException: External file access failed due to internal error: 'Error occurred while accessing HDFS: Java exception raised on call to HdfsBridge_IsDirExist. Java exception message:
HdfsBridge::isDirExist - Unexpected error encountered checking whether directory exists or not: AbfsRestOperationException: Operation failed: "This request is not authorized to perform this operation using this permission.", 403, HEAD, https://datalakename.dfs.core.windows.net/temp/2020-06-24/14-21-57-819/88228292-9f00-4da0-b778-d3421ea4d2ec?upn=false&timeout=90' [ErrorCode = 105019] [SQLState = S0001]

但是我可以使用以下命令写信给 Synapse...

DummyDF.write.mode("append").jdbc(jdbcUrl,"DummyTable")

我不确定缺少什么。

4

1 回答 1

0

第二种选择不使用 Polybase,只通过 JDBC,速度较慢。

我认为您的错误未连接到 Databricks 和 SQL DW 库,而是连接到 Synapse 和存储之间。

你能检查一下:

  • 是否通过 Azure 门户在 Azure Synapse 服务器的防火墙窗格上将“允许访问 Azure 服务”设置为 ON(总体记住,如果您的 Azure Blob 存储仅限于选择虚拟网络,Azure Synapse 需要托管服务标识而不是访问密钥)
  • 验证您是否正确指定了 tempDir,对于 blob 存储"wasbs://" + blobContainer + "@" + blobStorage +"/tempDirs"或*"abfss://..."* 对于 ADLS Gen 2
  • 您可以直接从 Synapse 使用托管标识为该存储创建外部表吗?

这是一篇涵盖解决与您的 105019 相同的错误代码的文章: https ://techcommunity.microsoft.com/t5/azure-synapse-analytics/msg-10519-when-attempting-to-access-external-table-via -polybase/ba-p/690641

于 2020-07-12T19:03:21.473 回答