從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.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 /令牌”

這也適用於集群火花配置

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服務主筆記本

在新標簽頁打開筆記本