Использование distcp для копирования в Azure ADLS Gen1 не работает с 403 - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь скопировать на Azure Data Lake Storage (ADLS) Gen1 при аутентификации с использованием OAuth2.

Я получаю следующую ошибку:

com.microsoft. azure .datalake.store.ADLException: Ошибка при получении информации для файла / myContainer Операция GETFILESTATUS не удалась с HTTP403: null

Вот как выглядит мой distcp

hadoop distcp 
    -Dfs.adl.oauth2.access.token.provider.type=ClientCredential 
    -Dfs.adl.oauth2.client.id=<client_id>
    -Dfs.adl.oauth2.credential=<key>
    -Dfs.adl.oauth2.refresh.url=https://login.microsoftonline.com/*****/oauth2/token 
hdfs:///path/to/file 
adl://adlsgen1.blob.core.windows.net/myContainer

Есть идеи, что могло вызвать это?

1 Ответ

1 голос
/ 11 мая 2020

Если вы хотите использовать Azure AD для доступа к Azure озеру данных gen2 с субъектом службы, нам нужно настроить RAB C роль для субъекта-службы.

Например,

  1. Создайте участника-службу и назначьте Storage Blob Data Owner sp. (Я использую Azure CLI).
az ad sp create-for-rbac -n "MyApp" --role "Storage Blob Data Owner"\
    --scopes /subscriptions/{SubID}/resourceGroups/{ResourceGroup1} \
    /subscriptions/{SubID}/resourceGroups/{ResourceGroup2}
настроить
hadoop distcp 
    -D fs.azure.account.auth.type=OAuth 
    -D fs.azure.account.oauth.provider.type=org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider
    -D fs.azure.account.oauth2.client.endpoint=[token endpoint],
    -D fs.azure.account.oauth2.client.id=[Application client ID],
    -D fs.azure.account.oauth2.client.secret=[client secret]
hdfs:///path/to/file 
abfs://container1@abfswales1.dfs.core.windows.net/

Для получения дополнительных сведений обратитесь к документу и

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...