我正在使用(很好...试图使用)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/ 使用我的房客ID / oauth2 / token 5次尝试后引发的最后一次遇到的异常。
[java.io.IOException,java.io.IOException,java.io.IOException,java.io.IOException,java.io.IOException] [ServerRequestId:null]位于 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) 在 com.microsoft.azure.datalake.store.ADLStoreClient.enumerateDirectory(ADLStoreClient.java:398) 在 com.microsoft.azure.datalake.store.ADLStoreClient.enumerateDirectory(ADLStoreClient.java:384)
我已将已注册的应用程序的Reader
角色赋予了Data Lake:
问题
如何允许Spark访问Data Lake?
更新
我已授予tenantdata
和events
文件夹Read
和Execute
的访问权限:
答案 0 :(得分:1)
Gen1湖上的RBAC角色不授予对数据的访问权限(仅授予资源本身),但拥有者角色除外,该角色授予超级用户访问权限并确实授予完全数据访问权限。
您必须使用门户网站中的Data Explorer授予对文件夹/文件本身的访问权限,或者使用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
只有“所有者”角色会自动启用文件系统访问。的 贡献者,读者和所有其他角色都需要ACL才能启用任何 文件夹和文件的访问级别