我正在使用(嗯......尝试使用)Azure Databricks,我已经创建了一个笔记本。
我希望笔记本连接我的Azure Data Lake(Gen1)并转换数据。我跟着documentation把代码放在笔记本的第一个单元格中:
spark.conf.set("dfs.adls.oauth2.access.token.provider.type", "ClientCredential")
spark.conf.set("dfs.adls.oauth2.client.id", "**using the application ID of the registered application**")
spark.conf.set("dfs.adls.oauth2.credential", "**using one of the registered application keys**")
spark.conf.set("dfs.adls.oauth2.refresh.url", "https://login.microsoftonline.com/**using my-tenant-id**/oauth2/token")
dbutils.fs.ls("adl://**using my data lake uri**.azuredatalakestore.net/tenantdata/events")
执行失败,出现此错误:
com.microsoft.azure.datalake.store.ADLException:枚举目录时出错/
操作null失败,异常为java.io.IOException:服务器返回HTTP响应代码:400为URL:https://login.microsoftonline.com/using my-tenant-id / oauth2 / token上次遇到异常,在5次尝试后抛出异常。
[java.io.IOException,java.io.IOException,java.io.IOException,java.io.IOException,java.io.IOException] [ServerRequestId:null] at com.microsoft.azure.datalake.store.ADLStoreClient.getExceptionFromResponse (ADLStoreClient.java:1169)位于com.microsoft.azure.datalake.store.ADLStoreClient.enumerateDirectoryInternal(ADLStoreClient.java:558)的com.microsoft.azure.datalake.store.ADLStoreClient.enumerateDirectory(ADLStoreClient.java:534)at at com.microsoft.azure.datalake.store.ADLStoreClient.enumerateDirectory(ADLStoreClient.java:398)at com.microsoft.azure.datalake.store.ADLStoreClient.enumerateDirectory(ADLStoreClient.java:384)
我已将注册的应用程序Reader
角色提供给Data Lake:
题
如何让Spark访问Data Lake?
更新
我已授予tenantdata
和events
文件夹Read
和Execute
访问:
Gen1湖上的RBAC角色不授予对数据(仅资源本身)的访问权限,但授予超级用户访问权限且授予完全数据访问权限的所有者角色除外。
您必须使用门户中的数据资源管理器授予对文件夹/文件本身的访问权限,或使用POSIX权限下载存储资源管理器。
本指南解释了如何做到这一点的细节:https://docs.microsoft.com/en-us/azure/data-lake-store/data-lake-store-access-control
参考:https://docs.microsoft.com/en-us/azure/data-lake-store/data-lake-store-secure-data
只有Owner角色会自动启用文件系统访问。 Contributor,Reader和所有其他角色都需要ACL才能启用对文件夹和文件的任何级别的访问