Подключение к Synapse из DataBricks с помощью субъекта-службы

Я пытаюсь подключиться из 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")

Я не уверен, чего не хватает.

1 ответ

Второй вариант - не использовать Polybase, работает только через JDBC и работает намного медленнее.

Я думаю, ваша ошибка связана не с Databricks и библиотекой SQL DW, а с подключением между Synapse и Storage.

Не могли бы вы проверить:

  • Установлено ли для параметра "Разрешить доступ к службам Azure" значение ВКЛ на панели брандмауэра сервера Azure Synapse через портал Azure (помните, что если ваше хранилище BLOB-объектов Azure ограничено для выбора виртуальных сетей, для 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

Другие вопросы по тегам