开始
加载和管理数据
处理数据
政府
参考和资源
2023年1月13日更新
给我们反馈
Databricks允许用户将云对象存储挂载到Databricks文件系统(DBFS),以简化不熟悉云概念的用户的数据访问模式。挂载的数据不能与Unity Catalog一起工作,Databricks建议迁移使用挂载,并使用Unity Catalog管理数据治理。
Databricks挂载在工作区和云对象存储之间创建了一个链接,这使您能够使用相对于Databricks文件系统的熟悉的文件路径与云对象存储交互。对象下创建本地别名来进行挂载/ mnt存放以下信息的目录:
/ mnt
云对象存储的位置。
连接到存储帐户或容器的驱动程序规格。
访问数据所需的安全凭据。
的源指定对象存储的URI(并且可以选择编码安全凭证)。的挂载点文件中的本地路径/ mnt目录中。某些对象存储源支持可选的encryptionType论点。对于某些访问模式,您可以将额外的配置规范作为字典传递给extraConfigs.
源
挂载点
encryptionType
extraConfigs
山(源:str,挂载点:str,encryptionType:可选[str]="",extraConfigs:可选[dict[str:str]]=没有一个)
在配置或更改数据挂载之前,请与您的工作空间和云管理员进行检查,因为不正确的配置可能为工作空间中的所有用户提供不安全的访问。
请注意
除了本文中描述的方法之外,您还可以使用Databricks Terraform提供商而且databricks_mount.
卸载挂载点,使用以下命令:
dbutils.fs.卸载(“/ mnt / < mount-name >”)
重要的
在作业运行时卸载挂载点可能会导致错误。确保生产作业不卸载存储作为处理的一部分。
您可以通过挂载S3桶什么是数据库文件系统(DBFS)?.挂载是一个指向S3位置的指针,因此数据永远不会在本地同步。
通过集群创建挂载点后,该集群的用户可以立即访问挂载点。若要在另一个正在运行的集群中使用挂载点,必须运行dbutils.fs.refreshMounts ()以使新创建的挂载点可用。
dbutils.fs.refreshMounts ()
挂载S3桶有以下几种方式:
使用AWS实例配置文件挂载桶
使用AWS密钥挂载桶
属性使用实例概要文件挂载桶AssumeRole政策
AssumeRole
您可以使用AWS管理S3桶的身份验证和授权实例配置文件.对桶中对象的访问由授予实例配置文件的权限决定。如果该角色具有写权限,则该挂载点的用户可以写该桶中的对象。如果该角色具有读访问权限,则挂载点的用户将能够读该桶中的对象。
使用实例概要配置集群。
安装桶。
aws_bucket_name=“< aws-bucket-name >”mount_name=“< mount-name >”dbutils.fs.山(f“s3a: / /{aws_bucket_name}",f“/ mnt /{mount_name}")显示(dbutils.fs.ls(f“/ mnt /{mount_name}"))
瓦尔AwsBucketName=“< aws-bucket-name >”瓦尔MountName=“< mount-name >”dbutils.fs.山(“s3a: / /$AwsBucketName",“/ mnt /$MountName")显示(dbutils.fs.ls(“/ mnt /$MountName"))
您可以使用AWS密钥挂载桶。
当使用密钥挂载S3桶时,所有用户有读写权限吗所有的对象S3桶。
下面的例子使用Databricks秘密用来存储密钥。你必须转义URL秘钥。
access_key=dbutils.秘密.得到(范围=“aws”,关键=“aws-access-key”)secret_key=dbutils.秘密.得到(范围=“aws”,关键=“aws-secret-key”)encoded_secret_key=secret_key.取代(“/”,"% 2 f")aws_bucket_name=“< aws-bucket-name >”mount_name=“< mount-name >”dbutils.fs.山(f“s3a: / /{access_key}:{encoded_secret_key}@{aws_bucket_name}",f“/ mnt /{mount_name}")显示(dbutils.fs.ls(f“/ mnt /{mount_name}"))
瓦尔AccessKey=dbutils.秘密.得到(范围=“aws”,关键=“aws-access-key”)//将密钥编码为包含"/"瓦尔SecretKey=dbutils.秘密.得到(范围=“aws”,关键=“aws-secret-key”)瓦尔EncodedSecretKey=SecretKey.取代(“/”,“% 2 f”)瓦尔AwsBucketName=“< aws-bucket-name >”瓦尔MountName=“< mount-name >”dbutils.fs.山(“s3a: / /$AccessKey:$EncodedSecretKey@$AwsBucketName",“/ mnt /$MountName")显示(dbutils.fs.ls(“/ mnt /$MountName"))
您必须首先进行配置使用gauserole策略访问跨帐户S3桶.
中设置S3选项时挂载桶extraConfigs:
dbutils.fs.山(“s3a: / / < s3-bucket-name >”,“/ mnt / < s3-bucket-name >”,extra_configs={“fs.s3a.credentialsType”:“AssumeRole”,“fs.s3a.stsAssumeRole.arn”:“攻击:aws:我::< bucket-owner-acct-id >: / MyRoleB”角色,“fs.s3a.canned.acl”:“BucketOwnerFullControl”,“fs.s3a.acl.default”:“BucketOwnerFullControl”})
dbutils.fs.山(“s3a: / / < s3-bucket-name >”,“/ mnt / < s3-bucket-name >”,extraConfigs=地图(“fs.s3a.credentialsType”->“AssumeRole”,“fs.s3a.stsAssumeRole.arn”->“攻击:aws:我::< bucket-owner-acct-id >: / MyRoleB”角色,“fs.s3a.canned.acl”->“BucketOwnerFullControl”,“fs.s3a.acl.default”->“BucketOwnerFullControl”))
Databricks支持使用服务器端加密对数据加密。本节将介绍在S3中通过DBFS写入文件时如何使用服务器端加密。砖支持Amazon s3管理的加密密钥(SSE-S3)而且AWS kms管理的加密密钥(SSE-KMS).
使用SSE-S3挂载S3桶,运行如下命令:
dbutils.fs.山(“s3a: / /$AccessKey:$SecretKey@$AwsBucketName",“/ mnt /$MountName",“sse-s3”)
使用SSE-S3将文件写入相应的S3桶,执行如下命令:
dbutils.fs.把(“/ mnt /$MountName",“< >文件内容”)
挂载传入的源目录sse-kms或sse-kms: $ KmsKey作为加密类型。
sse-kms
sse-kms: $ KmsKey
要使用默认的KMS主密钥使用SSE-KMS挂载S3桶,执行以下命令:
dbutils.fs.山(“s3a: / /$AccessKey:$SecretKey@$AwsBucketName",“/ mnt /$MountName",“sse-kms”)
要使用特定的KMS密钥使用SSE-KMS挂载S3桶,请执行以下命令:
dbutils.fs.山(“s3a: / /$AccessKey:$SecretKey@$AwsBucketName",“/ mnt /$MountName",“sse-kms: KmsKey美元”)
使用SSE-KMS向S3桶写入文件,执行如下命令:
如果计划同时从多个集群或工作负载写入存储在S3中的给定表,Databricks建议您这样做配置Databricks S3提交服务.您的笔记本代码必须挂载bucket并添加AssumeRole配置。此步骤仅对于DBFS挂载是必需的,对于访问不是必需的根DBFS存储在工作区的根S3桶中。使用Python的示例如下:
#如果其他代码在没有使用新角色的情况下已经挂载了桶,请先卸载它dbutils.fs.卸载(“/ mnt / < mount-name >”)#挂载桶并承担新角色dbutils.fs.山(“s3a: / / < bucket名> /”,“/ mnt / < mount-name >”,extra_configs={“fs.s3a.credentialsType”:“AssumeRole”,“fs.s3a.stsAssumeRole.arn”:“< role-arn >”})
您可以使用Azure Active Directory (Azure AD)应用程序服务主体在Azure存储帐户中挂载数据以进行身份验证。有关更多信息,请参见使用Azure Active Directory访问存储.
Databricks工作区中的所有用户都可以访问挂载的ADLS Gen2帐户。您用于访问ADLS Gen2帐户的服务主体应仅授予该ADLS Gen2帐户的访问权限;它不应该被授予访问其他Azure资源的权限。
通过集群创建挂载点时,集群用户可以立即访问该挂载点。若要在另一个正在运行的集群中使用挂载点,必须运行dbutils.fs.refreshMounts ()以使新创建的挂载点可用。
使用秘密的挂载点不会自动刷新。如果挂载的存储依赖于旋转、过期或删除的秘密,则可能发生错误,例如401未经授权的.要解决此类错误,必须卸载并重新挂载存储。
401未经授权的
在笔记本中运行以下操作来验证并创建挂载点。
配置={“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”:“<应用程序id >”,“fs.azure.account.oauth2.client.secret”:dbutils.秘密.得到(范围=“< scope-name >”,关键=“< service-credential-key-name >”),“fs.azure.account.oauth2.client.endpoint”:“https://login.microsoftonline.com/ < directory-id > / oauth2 /令牌”}#可选地,您可以添加到您的挂载点的源URI。dbutils.fs.山(源=“abfss: / / <容器名称> @ < storage-account-name > .dfs.core.windows.net/”,mount_point=“/ mnt / < mount-name >”,extra_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”->“<应用程序id >”,“fs.azure.account.oauth2.client.secret”->dbutils.秘密.得到(范围=“< scope-name >”,关键=“< service-credential-key-name >”),“fs.azure.account.oauth2.client.endpoint”->“https://login.microsoftonline.com/ < directory-id > / oauth2 /令牌”)//可选地,您可以添加到您的挂载点的源URI。dbutils.fs.山(源=“abfss: / / <容器名称> @ < storage-account-name > .dfs.core.windows.net/”,挂载点=“/ mnt / < mount-name >”,extraConfigs=配置)
取代
<应用程序id >与应用程序(客户端)ID用于Azure Active Directory应用程序。
<应用程序id >
< scope-name >使用Databricks秘密作用域名。
< scope-name >
< service-credential-key-name >使用包含客户端秘密的密钥的名称。
< service-credential-key-name >
< directory-id >与目录(租户)ID用于Azure Active Directory应用程序。
< directory-id >
<容器名称>ADLS Gen2存储帐户中的容器名称。
<容器名称>
< storage-account-name >ADLS Gen2存储帐户名。
< storage-account-name >
< mount-name >DBFS中预期挂载点的名称。
< mount-name >