
今天分享的主题是:
如何从Azure Databricks中直接访问Azure存储账户?确切的说是Azure数据湖和块存储:Azure Data Lake Storage Gen2和Blob Storage
据最新官方文档说目前有以下4种访问方式:
- Unity Catalog managed external locations
- Azure service principals
- SAS tokens
- Account keys
第1种:Unity Catalog managed external locations。没用过,所以没什么经验可以分享。
第2种:Azure service principals
这个应该也是微软所推荐的,类似于一个服务账号,给这个service principal赋予什么样的权限,它就能做什么样的事情。
第3种:SAS tokens。其实这种方式与第4种:Account keys很类似,但是这两种推荐前者SAS tokens。因为SAS tokens是基于Blob container级别的,你指定哪个container就只有那个container的权限。而后者Account keys是基于存储账户级别的,权限更大,指定存储账户下面所有的container都有相应的权限。类比就是一个是控制文件夹级别访问权限,一个是控制磁盘级别访问权限。
今天我们只用第3种方式:SAS token
假如你有一个存储账户:mystorageaccount
在这个存储账户下面有一个container名叫:my-container
那如何从Azure Databricks上直接读取上面存储账户的blob中container下面的数据呢?请参考下面完整代码:
// 以下是Scala代码,请在你的Databricks Notebook中创建Scala notebook运行下面的代码// set variablesval storageAccountName = "mystorageaccount"val containerName = "my-container"val sasToken = "sp=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"val dataSourcePath = "abfss://%s@%s.dfs.core.windows.net/data".format(containerName, storageAccountName)// configue spark with SAS token access wayspark.conf.set("fs.azure.account.auth.type.%s.dfs.core.windows.net".format(storageAccountName ), "SAS")spark.conf.set("fs.azure.sas.token.provider.type.%s.dfs.core.windows.net".format(storageAccountName ), "org.apache.hadoop.fs.azurebfs.sas.FixedSASTokenProvider")spark.conf.set("fs.azure.sas.fixed.token.%s.dfs.core.windows.net".format(storageAccountName ), sasToken)// load avro format dataval myAVRODataFrame = spark.read.format("avro").load(dataSourcePath)// load parquetformat dataval myParquetDataFrame = spark.read.parquet(dataSourcePath)// show dataframemyAVRODataFrame.show()myParquetDataFrame.show()
【参考链接】
https://learn.microsoft.com/en-us/azure/databricks/external-data/azure-storage#deprecated-patterns-for-storing-and-accessing-data-from-azure-databricks
关于其它几种访问方式
点击关注本公众号,且听下回分解!
👇
原文作者:BPShare;如有侵权,请联系管理员删除。