在尝试使用OAuth2进行身份验证时,我试图复制到Azure Data Lake Storage(ADLS)Gen1。
我遇到以下错误:
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
有什么想法会导致这种情况吗?
答案 0 :(得分:1)
如果要使用Azure AD通过服务主体访问Azure数据湖gen2,我们需要configure RABC role作为服务主体。
例如
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/