從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 /令牌”)
這也適用於集群火花配置:
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。