从Databricks访问Azure Data Lake存储Gen1

微软已经宣布计划退休Azure数据湖存储Gen1(以前是Azure数据湖存储,也称为ADLS),并建议所有用户迁移到Azure数据湖存储Gen2.Databricks建议升级到Azure数据湖存储Gen2以获得最佳性能和新功能。

您可以直接使用服务主体访问Azure数据湖存储Gen1。

创建并授予服务主体权限

如果您选择的访问方法需要具有足够权限的服务主体,而您没有,请执行以下步骤:

  1. 创建可以访问资源的Azure AD应用程序和服务主体.注意以下属性:

    • 应用程序id:唯一标识客户端应用的ID。

    • directory-id:唯一标识Azure AD实例的ID。

    • service-credential:应用程序用来证明其身份的字符串。

  2. 注册服务主体,授予正确的服务主体角色分配,例如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 /令牌”

在哪里

  • dbutils.secrets.get(范围=“< scope-name >”,关键=“<键名>”)检索已存储为的存储帐户访问密钥秘密在一个秘密的范围

在设置了凭证之后,就可以使用标准的Spark和Databricks api来访问资源。例如:

瓦尔df=火花格式“铺”).负载“adl: / / <存储资源> .azuredatalakestore.net/ <目录名称>”dbutilsfsls“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。dbutilsfs=“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。dbutilsfs=“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.netadl: / / 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。

ADLS Gen1服务主笔记本

在新标签页打开笔记本