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)

Azure Data Lake Storage Gen2

Secret management

Databricks 第8篇:把Azure Data Lake Storage Gen2 (ADLS Gen 2)挂载到DBFS的更多相关文章

  1. 构建企业级数据湖?Azure Data Lake Storage Gen2实战体验(中)

    引言 相较传统的重量级OLAP数据仓库,“数据湖”以其数据体量大.综合成本低.支持非结构化数据.查询灵活多变等特点,受到越来越多企业的青睐,逐渐成为了现代数据平台的核心和架构范式. 因此数据湖相关服务 ...

  2. 构建企业级数据湖?Azure Data Lake Storage Gen2实战体验(下)

    相较传统的重量级OLAP数据仓库,“数据湖”以其数据体量大.综合成本低.支持非结构化数据.查询灵活多变等特点,受到越来越多企业的青睐,逐渐成为了现代数据平台的核心和架构范式. 作为微软Azure上最新 ...

  3. 构建企业级数据湖?Azure Data Lake Storage Gen2不容错过(上)

    背景 相较传统的重量级OLAP数据仓库,“数据湖”以其数据体量大.综合成本低.支持非结构化数据.查询灵活多变等特点,受到越来越多企业的青睐,逐渐成为了现代数据平台的核心和架构范式. 数据湖的核心功能, ...

  4. Azure Data Lake Storage Gen2实战体验

    相较传统的重量级OLAP数据仓库,“数据湖”以其数据体量大.综合成本低.支持非结构化数据.查询灵活多变等特点,受到越来越多企业的青睐,逐渐成为了现代数据平台的核心和架构范式. 作为微软Azure上最新 ...

  5. Big Data Solution in Azure: Azure Data Lake

    https://blogs.technet.microsoft.com/dataplatforminsider/2015/09/28/microsoft-expands-azure-data-lake ...

  6. data lake 新式数据仓库

    Data lake - Wikipedia https://en.wikipedia.org/wiki/Data_lake 数据湖 Azure Data Lake Storage Gen2 预览版简介 ...

  7. Data Lake Analytics + OSS数据文件格式处理大全

    0. 前言 Data Lake Analytics是Serverless化的云上交互式查询分析服务.用户可以使用标准的SQL语句,对存储在OSS.TableStore上的数据无需移动,直接进行查询分析 ...

  8. Data Lake Analytics: 读/写PolarDB的数据

    Data Lake Analytics 作为云上数据处理的枢纽,最近加入了对于PolarDB的支持, PolarDB 是阿里云自研的下一代关系型分布式云原生数据库,100%兼容MySQL,存储容量最高 ...

  9. Data Lake Analytics: 使用DataWorks来调度DLA任务

    DataWorks作为阿里云上广受欢迎的大数据开发调度服务,最近加入了对于Data Lake Analytics的支持,意味着所有Data Lake Analytics的客户可以获得任务开发.任务依赖 ...

  10. 使用Data Lake Analytics + OSS分析CSV格式的TPC-H数据集

    0. Data Lake Analytics(DLA)简介 关于Data Lake的概念,更多阅读可以参考:https://en.wikipedia.org/wiki/Data_lake 以及AWS和 ...

随机推荐

  1. 点击document隐藏某个div

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. Javascript模式(第二章基本技巧)------读书笔记

    本章主要帮助大家写出高质量的JS代码的方法,模式和习惯,例如:避免使用全局变量,使用单个的var变量声明,缓存for循环的长度变量length等 一.尽量避免使用全局变量 1 每一个js环境都有一个全 ...

  3. mysql5.6安装

    mysql5.6安装 #卸载原有的mysqlyum remove mysql*ls /etc/my.cnf*mv /etc/my.cnf* /tmp/ #安装依赖包yum install make c ...

  4. Office and Windows KMS使用帮助

    Office KMS Key: http://technet.microsoft.com/zh-cn/library/dn385360.aspx                         htt ...

  5. The method replace(int, Fragment, String) in the type FragmentTransaction is not applicable for the arguments (int, SettingFragment, String)

    The method replace(int, Fragment, String) in the type FragmentTransaction is not applicable for the ...

  6. GUI动态创建button

    #include "cocos2d.h" #include "cocos-ext.h" USING_NS_CC; USING_NS_CC_EXT; using ...

  7. POJ 2352 Stars 树阵

    标题效果:特定y值在升序一些点.一个点的定义level值点的数目对于其左下,每个请求level多少分. 思维:因为y值它是按升序.所以分的差距仅仅是推断x值相比之前的大.就用树状数组维护. CODE: ...

  8. ZOJ 2314 Reactor Cooling(无源汇有上下界可行流)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2314 题目大意: 给n个点,及m根pipe,每根pipe用来流躺 ...

  9. [Java] public, private, final and basic rules for naming.

    1. Access: public, private, protected public: Any other class can access a public field or method. ( ...

  10. Servlet基本_Httpリクエスト、レスポンス

    1.リクエスト リクエストは.リクエストライン.メッセージヘッダ.改行.メッセージボディで組まれる. 主なリクエストヘッダは. Accept クライアントが利用可能なデータメディアタイプを指定. Ac ...