Databricks 第8篇:把Azure Data Lake Storage Gen2 (ADLS Gen 2)挂载到DBFS
DBFS使用dbutils实现存储服务的装载(mount、挂载),用户可以把Azure Data Lake Storage Gen2和Azure Blob Storage 账户装载到DBFS中。mount是data lake storage和 blob storage的指针,因此数据不会同步到本地。
一,创建Azure Data Lake Storage Gen2
从Azure Portal中搜索Storage Account,开始创建Data Lake V2
1,创建Data Lake V2的详细步骤
Step1:从Basics选项卡中,选择Account Kind为:StorageV2(General purpose v2)

Step2:Networking 使用默认值
Step3:Data Protection 使用默认值
Step4:Advanced选项卡,启用"Hierarchical namespace"

2,为Data Lake V2创建文件系统
进入到Data Lake V2的资源页面中,从“Tools and SDKs”中选择“Storage Explorer”,

进入到Storage Explorer中,右击CONTAINERS,选择“Create file system”:

二,创建App registraation
为了在ADLS Gen 2和Azure Databricks之间建立连接,需要应用程序连接,如果在Azure Active Directory中将应用程序注册配置为“是”,则非管理员用户可以注册自定义开发的应用程序以在此目录中使用。
1,创建App
从Azure Portal中搜索“Azure Active Directory”,选择“App registration”,创建vic_test_app

创建完成之后,点击“App registrations”,从“Owned applications”中点击vic_test_app。

2,为该app添加app secret(验证密钥),以访问该app

复制Client Secret 的Value字段,因为执行其他操作之后,这个值将无法再查看到。
3,得到的数据

三,把Service Principal的权限授予Data Lake V2账户
我们需要为Service Principal分配访问角色,该Service Principal是在注册App时自动创建,以访问存储账户中的数据。

四,创建Key Vault
Key Vault服务用于安全地存储key、密码、证书等secret,需要把从已注册的app中获取到的密钥存储到Key Vault中。
1:创建Key Vault
在Key Vault创建完成之后,向Key Vault中添加一个Secret,
2:保存Secret
定义Secret的Name,把从已注册的app中获取到的Client Secret存储到Secret的Value中。

3,从Key Vault得到的数据
从Key Vault的Settings中点击“Properties”

五,创建Azure Key Vault-backed的Secret Scope
使用Secret Scope来管理Secret,Secret Scope是Secret构成的,该Secret是由name来唯一标识的。
Step1,导航到创建Secret Scope的页面
根据Databricks实例,导航到创建Secret Scope的页面,注意该URI是区分大小写的。
https://<databricks-instance>#secrets/createScope
Step2,输入Secret Scope的属性
ScopeName是区分大小写的,并且DNS Name和Resource ID都必须从Key Vault中复制。

六 ,挂载Data Lake Storage Gen2
通过创建 Azure Data Lake Storage Gen2的文件系统,注册App、创建Key Vault、创建Secret Scope,我们完成了把Data Lake Gen2挂载到DBFS的所有准备工作,并获得了以下数据:
- Client ID (a.k.a. Application ID)
- Client Secret (a.k.a. Application Secret)
- Directory ID (a.k.a Tenant ID)
- Databricks Secret Scope Name
- Key Name for Service Credentials (from Azure Key Vault, it is the secret's name)
- File System Name
- Storage Account Name
- Mount Name
Databricks提供了挂载命令:dbutils.mount(),通过该命令,我们可以把Azure Data Lake Storage Gen2挂载到DBFS中。挂载操作是一次性的操作,一旦挂载操作完成,就可以把远程的Data Lake Gen2的file system当作本地文件来使用。
1,挂载Azure Data Lake Storage Gen2
使用服务主体(Service Principal)和OAuth 2.0进行身份验证,把Azure Data Lake Storage Gen2帐户装载到DBFS,该装载点(mount pointer)是数据湖存储的指针,数据不需要同步到本地,但是只要远程文件系统中的数据有更新,我们就能获得数据的更新。
挂载Data Lake Storage Gen2文件系统,目前只支持OAuth 2.0 Credential:
######################################################################################
# Set the configurations. Here's what you need:
## 1.) Client ID (a.k.a Application ID)
## 2.) Client Secret (a.k.a. Application Secret)
## 3.) Directory ID
## 4.) File System Name
## 5.) Storage Account Name
## 6.) Mount Name
######################################################################################
configs = {"fs.azure.account.auth.type": "OAuth",
"fs.azure.account.oauth.provider.type": "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider",
"fs.azure.account.oauth2.client.id": "<client-id>",
"fs.azure.account.oauth2.client.secret": dbutils.secrets.get(scope = "<scope-name>", key = "<key-name-for-service-credential>"),
"fs.azure.account.oauth2.client.endpoint": "https://login.microsoftonline.com/<directory-id>/oauth2/token"} ######################################################################################
# Optionally, you can add <directory-name> to the source URI of your mount point.
######################################################################################
dbutils.fs.mount(
source = "abfss://<file-system-name>@<storage-account-name>.dfs.core.windows.net/",
mount_point = "/mnt/<mount-name>",
extra_configs = configs)
参数注释:
- <Client-id>:App ID
- <scope-name>:Secret Scope的名称
- <key-name-for-service-credential>:Azure Key Vault
- <directory-id>:tenant Id
<mount-name>:是DBFS path,表示Data Lake Store或其中的一个Folder在DBFS中装载的位置dbutils.secrets.get(scope="<scope-name>",key="<service-credential-key-name>"):从Secret Scope中的Secret中获取服务凭证- <file-system-name>:文件系统的名称
- <storage-account-name>:存储账户的名称
2,访问挂载点
访问挂载点中的文件,可以通过pyspark.sql来访问:
df = spark.read.text("/mnt/%s/...." % <mount-name>)
df = spark.read.text("dbfs:/mnt/<mount-name>/....")
或者通过SQL命令来访问:
%sql
select *
from csv.`/mnt/mount_datalakeg2/stword.csv`
3,刷新挂载点
dbutils.fs.refreshMounts()
4,卸载挂载点:
dbutils.fs.unmount("/mnt/<mount-name>")
参考文档:
Mounting & accessing ADLS Gen2 in Azure Databricks using Service Principal and Secret Scopes
Mount an ADLS Gen 2 to Databricks File System Using a Service Principal and OAuth 2.0 (Ep. 5)
Databricks 第8篇:把Azure Data Lake Storage Gen2 (ADLS Gen 2)挂载到DBFS的更多相关文章
- 构建企业级数据湖?Azure Data Lake Storage Gen2实战体验(中)
引言 相较传统的重量级OLAP数据仓库,“数据湖”以其数据体量大.综合成本低.支持非结构化数据.查询灵活多变等特点,受到越来越多企业的青睐,逐渐成为了现代数据平台的核心和架构范式. 因此数据湖相关服务 ...
- 构建企业级数据湖?Azure Data Lake Storage Gen2实战体验(下)
相较传统的重量级OLAP数据仓库,“数据湖”以其数据体量大.综合成本低.支持非结构化数据.查询灵活多变等特点,受到越来越多企业的青睐,逐渐成为了现代数据平台的核心和架构范式. 作为微软Azure上最新 ...
- 构建企业级数据湖?Azure Data Lake Storage Gen2不容错过(上)
背景 相较传统的重量级OLAP数据仓库,“数据湖”以其数据体量大.综合成本低.支持非结构化数据.查询灵活多变等特点,受到越来越多企业的青睐,逐渐成为了现代数据平台的核心和架构范式. 数据湖的核心功能, ...
- Azure Data Lake Storage Gen2实战体验
相较传统的重量级OLAP数据仓库,“数据湖”以其数据体量大.综合成本低.支持非结构化数据.查询灵活多变等特点,受到越来越多企业的青睐,逐渐成为了现代数据平台的核心和架构范式. 作为微软Azure上最新 ...
- 【Azure 存储服务】Hadoop集群中使用ADLS(Azure Data Lake Storage)过程中遇见执行PUT操作报错
问题描述 在Hadoop集中中,使用ADLS 作为数据源,在执行PUT操作(上传文件到ADLS中),遇见 400错误[put: Operation failed: "An HTTP head ...
- Azure Data Lake(一) 在NET Core 控制台中操作 Data Lake Storage
一,引言 Azure Data Lake Storage Gen2 是一组专用于大数据分析的功能,基于 Azure Blob Storage 构建的.Data Lake Storage Gen2 包含 ...
- ADF 第一篇:Azure Data Factory介绍
Azure Data Factory(简写 ADF)是Azure的云ETL服务,简单的说,就是云上的SSIS.ADF是基于云的ETL,用于数据集成和数据转换,不需要代码,直接通过UI(code-fre ...
- Big Data Solution in Azure: Azure Data Lake
https://blogs.technet.microsoft.com/dataplatforminsider/2015/09/28/microsoft-expands-azure-data-lake ...
- data lake 新式数据仓库
Data lake - Wikipedia https://en.wikipedia.org/wiki/Data_lake 数据湖 Azure Data Lake Storage Gen2 预览版简介 ...
随机推荐
- JavaSE10-继承&super&this&抽象类
1.继承 1.1 概述 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那一个类即可. 其中,多个类可以称为子类,单独那一个类称为父类.超类(s ...
- 自顶向下redis4.0(1)启动
redis4.0的启动流程 目录 redis4.0的启动流程 简介 正文 全局server对象 初始化配置 初始化服务器 事件主循环 参考文献 简介 redis 在接收客户端连接之前,大概做了以下几件 ...
- Mac电脑完美解决 BasicIPv6ValidationError 问题,通过命令行更改ip设置
在更改mac电脑ip网络时,提示BasicIPv6ValidationError.
- Java源码赏析(六)Class<T> 类
目的 Class 类是每一个程序员都必须了解的,也是使用反射机制的基础. 这篇文章将Class 类的公共方法大致介绍了一遍(省略了安全.枚举.断言.注解相关代码). 代码 package java.l ...
- writeup | 你知道php的备份文件吗
题目地址:https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=0&id=5064 转载请注明出处作者 ...
- 出现VMware Workstation 无法连接到虚拟机。请确保您有权运行该程序、访问该程序使用的所有目录以及访问所有临时文件目录。 未能将管道连接到虚拟机: 所有的管道范例都在使用中。
今天在学习Linux 的时候 启动VM时出现了这个问题, 搞了很久终于弄好了, 就写篇博客来记录一下,帮助一下大家,如果对大家有帮助,还请大哥大姐点个关注,你的支持就是我坚持下去的动力 ! VMwar ...
- net core cap结合redis+数据库实现最终一致性
CAP 同时支持使用 RabbitMQ,Kafka,Azure Service Bus 等进行底层之间的消息发送. CAP 目前支持使用 Sql Server,MySql,PostgreSql,Mon ...
- 手把手教你搭饥荒专用服务器(五)—MOD自动下载安装(Windows+Linux)
想了解更详细内容,请点击原文地址:https://wuter.cn/1985.html/ 饥荒专用服务器的mod设置总共有两种方法. 方法一 在本地游戏中更新mod,然后把mod上传到服务器,但是这种 ...
- 深入浅出JVM(一):你写得.java文件是如何被加载到内存中执行的
众所周知,.java文件需要经过编译生成.class文件才能被JVM执行. 其中,JVM是如何加载.class文件,又做了些什么呢? .class文件通过 加载->验证->准备->解 ...
- 【译】JWT(JSON Web Token) 入门指南
JWT 入门指南 原文地址:https://blog.angular-university.io/angular-jwt/ 这篇文章是两篇手把手教你如何在Angular应用(也适用于企业级应用)中实现 ...