從磚訪問Azure數據存儲Gen1湖
微軟宣布退休的計劃Azure數據存儲Gen1湖湖(原Azure的數據存儲,也稱為ADLS)和推薦所有用戶遷移到Azure數據存儲Gen2湖。磚建議升級到Azure代最佳數據湖存儲性能和新特性。
你可以直接訪問Azure數據存儲Gen1湖使用服務主體。
創建服務主體和授予權限
如果你選擇訪問方法需要一個服務主體與足夠的權限,你沒有,遵循這些步驟:
創建一個Azure廣告可以訪問資源的應用程序和服務主體。注意以下屬性:
應用程序id
:一個ID,惟一地標識客戶端應用程序。directory-id
:一個ID,惟一地標識Azure廣告實例。service-credential
:一個應用程序使用字符串來證明其身份。
注冊服務主體,給予正確的角色分配湖,如貢獻者,Azure數據存儲Gen1帳戶。
直接與火花訪問api使用服務主體和OAuth 2.0
湖從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 /令牌”)
在哪裏
設置憑證之後,您可以使用標準的火花和磚api來訪問資源。例如:
瓦爾df=火花。讀。格式(“鋪”)。負載(“adl: / / <存儲資源>.azuredatalakestore.net/ <目錄名稱>”)dbutils。fs。ls(“adl: / / <存儲資源>.azuredatalakestore.net/ <目錄名稱>”)
Azure數據存儲Gen1湖提供目錄級別的訪問控製,因此服務主體必須獲得你想要的目錄讀取數據以及Azure存儲Gen1湖資源。
通過metastore
訪問adl: / /
metastore中指定的位置,你必須指定Hadoop證書配置選項火花選擇當您創建集群通過添加spark.hadoop。
前綴對應的Hadoop配置鑰匙傳播到Hadoop metastore所使用的配置:
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資源或一個文件夾裏麵,使用以下命令:
. .code-language-tabs:
”“python款= {" fs.adl.oauth2.access.token.provider。類型”:“ClientCredential”、“fs.adl.oauth2.client。id”:“<應用程序id >”、“fs.adl.oauth2。證書”:dbutils.secrets。得到(範圍=“< scope-name >”,關鍵=“< key-name-for-service-credential >”),“fs.adl.oauth2.refresh.url”:“https://login.microsoftonline.com/ < directory-id > / oauth2 /令牌”} # Optionally, you can add to the source URI of your mount point. dbutils.fs.mount( source = "adl://.azuredatalakestore.net/", mount_point = "/mnt/", extra_configs = configs) ``` ```scala val configs = Map( "fs.adl.oauth2.access.token.provider.type" -> "ClientCredential", "fs.adl.oauth2.client.id" -> "", "fs.adl.oauth2.credential" -> dbutils.secrets.get(scope = "", key = ""), "fs.adl.oauth2.refresh.url" -> "https://login.microsoftonline.com//oauth2/token") // Optionally, you can add to the source URI of your mount point. dbutils.fs.mount( source = "adl://.azuredatalakestore.net/", mountPoint = "/mnt/", extraConfigs = configs) ``` where * `` is a DBFS path that represents where the account or a folder inside it (specified in `source`) will be mounted in DBFS. * Access files in your container as if they were local files, for example: .. code-language-tabs:: ```python df = spark.read.format("text").load("/mnt//....") df = spark.read.format("text").load("dbfs:/mnt//....") ``` ```scala val df = spark.read.format("text").load("/mnt//....") val df = spark.read.format("text").load("dbfs:/mnt//....") ```
建立服務多個帳戶的憑證
您可以設置多個Azure服務憑證數據存儲Gen1湖占使用會話通過添加在星星之火帳戶。<帳戶名稱>
配置鑰匙。舉個例子,如果你想設置賬戶訪問憑證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湖和山。