从Databricks访问Azure Data Lake存储Gen1
微软已经宣布计划退休Azure数据湖存储Gen1(以前是Azure数据湖存储,也称为ADLS),并建议所有用户迁移到Azure数据湖存储Gen2.Databricks建议升级到Azure数据湖存储Gen2以获得最佳性能和新功能。
您可以直接使用服务主体访问Azure数据湖存储Gen1。
创建并授予服务主体权限
如果您选择的访问方法需要具有足够权限的服务主体,而您没有,请执行以下步骤:
创建可以访问资源的Azure AD应用程序和服务主体.注意以下属性:
应用程序id
:唯一标识客户端应用的ID。directory-id
:唯一标识Azure AD实例的ID。service-credential
:应用程序用来证明其身份的字符串。
注册服务主体,授予正确的服务主体角色分配,例如Azure数据湖存储Gen1帐户上的“贡献者”。
使用服务主体和OAuth 2.0直接使用Spark api访问
要从您的Azure数据湖存储Gen1帐户读取,您可以配置Spark在您的笔记本中使用以下片段的服务凭据:
火花.相依.集(“fs.adl.oauth2.access.token.provider.type”,“ClientCredential”)火花.相依.集(“fs.adl.oauth2.client.id”,“<应用程序id >”)火花.相依.集(“fs.adl.oauth2.credential”,dbutils.秘密.得到(范围=“< scope-name >”,关键=“< key-name-for-service-credential >”))火花.相依.集(“fs.adl.oauth2.refresh.url”,“https://login.microsoftonline.com/ < directory-id > / oauth2 /令牌”)
在哪里
在设置了凭证之后,就可以使用标准的Spark和Databricks api来访问资源。例如:
瓦尔df=火花.读.格式(“铺”).负载(“adl: / / <存储资源> .azuredatalakestore.net/ <目录名称>”)dbutils.fs.ls(“adl: / / <存储资源> .azuredatalakestore.net/ <目录名称>”)
Azure Data Lake Storage Gen1提供目录级访问控制,因此服务主体必须能够访问希望从中读取的目录以及Azure Data Lake Storage Gen1资源。
通过转移瘤进入
访问adl: / /
的位置,则在创建集群时必须将Hadoop凭据配置选项指定为Spark选项spark.hadoop。
对应的Hadoop配置键的前缀,以将它们传播到metastore使用的Hadoop配置:
spark.hadoop.fs.adl.oauth2.access.token.provider。类型ClientCredentialspark.hadoop.fs.adl.oauth2.client。id <应用程序id >spark.hadoop.fs.adl.oauth2。凭据< service-credential >spark.hadoop.fs.adl.oauth2.refresh。url https://login.microsoftonline.com/ < directory-id > / oauth2 /令牌
警告
所有访问集群的用户都可以使用这些凭据。
挂载Azure数据湖存储Gen1资源或文件夹
要挂载Azure数据湖存储Gen1资源或其中的文件夹,请使用以下命令:
配置={“fs.adl.oauth2.access.token.provider.type”:“ClientCredential”,“fs.adl.oauth2.client.id”:“<应用程序id >”,“fs.adl.oauth2.credential”:dbutils.秘密.得到(范围=“< scope-name >”,关键=“< key-name-for-service-credential >”),“fs.adl.oauth2.refresh.url”:“https://login.microsoftonline.com/ < directory-id > / oauth2 /令牌”}#可选地,您可以添加到您的挂载点的源URI。 dbutils.fs.山(源=“adl: / / <存储资源> .azuredatalakestore.net/ <目录名称>”,mount_point=“/ mnt / < mount-name >”,extra_configs=配置)
瓦尔配置=地图(“fs.adl.oauth2.access.token.provider.type”->“ClientCredential”,“fs.adl.oauth2.client.id”->“<应用程序id >”,“fs.adl.oauth2.credential”->dbutils.秘密.得到(范围=“< scope-name >”,关键=“< key-name-for-service-credential >”),“fs.adl.oauth2.refresh.url”->“https://login.microsoftonline.com/ < directory-id > / oauth2 /令牌”)//可选地,您可以添加到您的挂载点的源URI。 dbutils.fs.山(源=“adl: / / <存储资源> .azuredatalakestore.net/ <目录名称>”,挂载点=“/ mnt / < mount-name >”,extraConfigs=配置)
在哪里
< mount-name >
是一个DBFS路径,表示Azure数据湖存储Gen1帐户或其中的文件夹(在源
)将挂载在DBFS中。dbutils.secrets.get(范围=“< scope-name >”,关键=“<键名>”)
检索已存储为的存储帐户访问密钥秘密在一个秘密的范围.
像访问本地文件一样访问容器中的文件,例如:
df=火花.读.格式(“文本”).负载(“/ mnt / < mount-name > /……”)df=火花.读.格式(“文本”).负载(“dbfs: / mnt / < mount-name > /……”)
瓦尔df=火花.读.格式(“文本”).负载(“/ mnt / < mount-name > /……”)瓦尔df=火花.读.格式(“文本”).负载(“dbfs: / mnt / < mount-name > /……”)
为多个帐户设置服务凭证
您可以为多个Azure数据湖存储Gen1帐户设置服务凭据,以便在单个Spark会话中使用帐户。<帐户名称>
到配置键。例如,如果您想为两个帐户设置访问凭证adl: / / example1.azuredatalakestore.net
和adl: / / example2.azuredatalakestore.net
,你可以这样做:
火花.相依.集(“fs.adl.oauth2.access.token.provider.type”,“ClientCredential”)火花.相依.集(“fs.adl.account.example1.oauth2.client.id”,“< application-id-example1 >”)火花.相依.集(“fs.adl.account.example1.oauth2.credential”,dbutils.秘密.得到(范围=“< scope-name >”,关键=“< key-name-for-service-credential-example1 >”))火花.相依.集(“fs.adl.account.example1.oauth2.refresh.url”,“https://login.microsoftonline.com/ < directory-id-example1 > / oauth2 /令牌”)火花.相依.集(“fs.adl.account.example2.oauth2.client.id”,“< application-id-example2 >”)火花.相依.集(“fs.adl.account.example2.oauth2.credential”,dbutils.秘密.得到(范围=“< scope-name >”,关键=“< key-name-for-service-credential-example2 >”))火花.相依.集(“fs.adl.account.example2.oauth2.refresh.url”,“https://login.microsoftonline.com/ < directory-id-example2 > / oauth2 /令牌”)
这也适用于集群AWS的配置:
spark.hadoop.fs.adl.oauth2.access.token.provider。类型ClientCredentialspark.hadoop.fs.adl.account.example1.oauth2.client。id < application-id-example1 >spark.hadoop.fs.adl.account.example1.oauth2。凭据< service-credential-example1 >spark.hadoop.fs.adl.account.example1.oauth2.refresh。url https://login.microsoftonline.com/ < directory-id-example1 > / oauth2 /令牌spark.hadoop.fs.adl.account.example2.oauth2.client。id < application-id-example2 >spark.hadoop.fs.adl.account.example2.oauth2。凭据< service-credential-example2 >spark.hadoop.fs.adl.account.example2.oauth2.refresh。url https://login.microsoftonline.com/ < directory-id-example2 > / oauth2 /令牌
下面的笔记本演示了如何通过挂载直接访问Azure数据湖存储Gen1。