Этот запрос не авторизован для выполнения этой операции с использованием этого разрешения - PullRequest
0 голосов
/ 02 марта 2019

Я пытаюсь смонтировать adls gen2 в таблицах данных со следующей конфигурацией

configs = {"fs.azure.account.auth.type": "OAuth",
   "fs.azure.account.oauth.provider.type": "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider",
   "fs.azure.account.oauth2.client.id": "service principal id",
   "fs.azure.account.oauth2.client.secret": "service principal key",
   "fs.azure.account.oauth2.client.endpoint": "https://login.microsoftonline.com/tenant-id/oauth2/token",
   "fs.azure.createRemoteFileSystemDuringInitialization": "true"}
dbutils.fs.mount(
source = "abfss://file-system@storage-account.dfs.core.windows.net/directory",
mount_point = "/mnt/data",
extra_configs = configs)

Я создал субъект службы и создал для него ключ, а затем предоставил роль BLOB-объекта хранения этому субъекту службы в назначении роли активного каталога

согласно документу

"abfss://<your-file-system-name>@<your-storage-account-name>.dfs.core.windows.net/<your-directory-name>"

какой должна быть папка your-file-system ==> внутри контейнера BLOB-объектов?you-directory-name ==> У меня есть только одна папка внутри контейнера BLOB-объектов, так что запутайте здесь storgae (ADLS gen 2 preview) Папка контейнера BLOB-объектов a.txt

error


ExecutionError: Произошла ошибка при вызове o480.mount.HEAD https://xxxxxxxxx.dfs.core.windows.net/xxxxxx?resource=filesystem&timeout=90 StatusCode = 403 StatusDescription = Этот запрос не авторизован для выполнения этой операции с использованием этого разрешения.ErrorCode = ErrorMessage = at shaded.databricks.v20180920_b33d810.org.apache.hadoop.fs.azurebfs.services.AbfsRestOperation.execute (AbfsRestOperation.java:134) в shaded.databricks.v20180920_b33d810.b.dll.services.hadoop.fs.azurebfs.AzureBlobFileSystem.fileSystemExists (AzureBlobFileSystem.java:749) по адресу shaded.databricks.v20180920_b33d810.org.apache.hadoop.fs.azurebfs.AzureBlobFileSystem.initialize.ilee.lob.daemon.dbutils.DBUtilsCore.verifyAzureFileSystem (DBUtilsCore.scala: 485) в com.databricks.backend.daemon.dbutils.DBUtilsCore.mount (DBUtilsCore.scala: 435) в sun.reflect.Generatedor.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) в java.lang.reflect.Method.invoke (Method.java:498) в py4j.reflection.MethodInvoker.invoke (MethodInvoker.java:244) в py4j.reflection.RefineEnglectionE.java: 380) в py4j.Gateway.invoke (Gateway.java:295) в py4j.commands.AbstractCommand.invokeMethod (AbstractCommand.java:132) в py4j.commands.CallCommand.execute (CallCommand.java:79) в py4j.GatewayConnection.run (GatewayConnection.java:251) в java.lang.Thread.run (Thread.java:748)

Ответы [ 2 ]

0 голосов
/ 23 марта 2019

Я только что боролся с этим и исправил имя этого параметра:

"fs.azure.account.oauth.provider.type"

до

"fs.azure.account.oauth2.provider.type"

Выполнение прошло успешно.

0 голосов
/ 03 марта 2019

Озера Gen2 не имеют контейнеров, у них есть файловые системы (что очень похоже на концепцию).

В вашей учетной записи хранения вы включили функцию "Иерархическое пространство имен"?Вы можете увидеть это в колонке конфигурации учетной записи хранения.Если у вас есть, то учетная запись хранения - Lake Gen2 - если нет, то это просто учетная запись хранения BLOB-объектов, и вам необходимо следовать инструкциям по использованию хранилища BLOB-объектов.

Если вы установили эту функцию, вы можете увидетьБлейд FileSystems - там вы создаете файловые системы, очень похожие на контейнеры BLOB-объектов.Это имя вам нужно в начале вашего abfss URL.

Однако сообщение об ошибке указывает на то, что у вашего участника службы нет разрешения на озеро данных.Вы должны либо предоставить разрешение, используя роль RBAC для ресурса учетной записи хранения (добавить участников или читателей учетной записи хранения).Или используйте Storage Explorer, чтобы предоставить разрешение на более детальном уровне.

Помните, что для озера данных требуются разрешения на выполнение для каждой папки от корня до папки, из которой вы пытаетесь читать / записывать.В качестве теста попробуйте сначала прочитать файл из root.

...