连接到 Cloudflare R2 外部位置

本页介绍如何连接到 Cloudflare R2 外部位置。 连接后,可以使用 Unity 目录控制对这些 R2 对象的访问。

若要成功连接到 Cloudflare R2 路径,需要两个 Unity 目录安全对象。 第一个是 存储凭据,它指定允许访问 R2 位置的 R2 API 令牌。 需要此存储凭据作为第二个必需对象:外部 位置,用于定义 R2 存储位置的路径以及访问该位置所需的凭据。

要求

  • 为 Unity Catalog 启用的 Databricks 工作区。

  • Databricks Runtime 14.3 或更高版本,或 SQL 仓库 2024.15 或更高版本。

    如果遇到错误消息 No FileSystem for scheme "r2",则计算可能位于不受支持的版本上。

  • Cloudflare 帐户。 请参阅 https://dash.cloudflare.com/sign-up

  • Cloudflare R2 管理员角色。 请参阅 Cloudflare 角色文档

  • 对附加到工作区的 Unity Catalog 元存储具有 CREATE STORAGE CREDENTIALCREATE EXTERNAL LOCATION 权限。 默认情况下,帐户管理员和元存储管理员拥有这些权限。

步骤 1:配置 R2 存储桶

  1. 创建 Cloudflare R2 存储桶。

    你可以使用 Cloudflare 仪表板或 Cloudflare Wrangler 工具。

    请参阅 Cloudflare R2“入门”文档Wrangler 文档

  2. 创建 R2 API 令牌并将其应用到存储桶。

    请参阅 Cloudflare R2 API 身份验证文档

    请设置以下令牌属性:

    • 权限:对象读取和写入。

      此权限将授予读取和写入访问权限,这在使用 R2 存储作为复制目标时是必需的,如使用 Cloudflare R2 副本或将存储迁移到 R2 中所述。

      如果要强制实施从 Azure Databricks 到 R2 存储桶的只读访问,可以改为创建一个仅授予只读访问权限的令牌。 但是,这可能是不必要的,因为你可以将存储凭据标记为只读,这样便会忽略此权限授予的任何写入访问权限。

    • (可选)TTL:要与数据接收者共享存储桶数据的时长。

    • (可选)客户端 IP 地址筛选:如有要将网络访问限制在指定接收者 IP 地址范围内,请选择此选项。 如果启用此选项,则必须指定接收者的 IP 地址,并且必须将工作区区域的 Databricks 控制平面 NAT IP 地址加入允许列表。

    请参阅 Azure Databricks 服务和资产的 IP 地址和域

  3. 复制 R2 API 令牌值:

    • 访问密钥 ID
    • 机密访问密钥

    Important

    令牌值仅显示一次。

  4. 在 R2 主页上,转到“帐户详细信息”并复制 R2 帐户 ID。

步骤 2:创建存储凭据

  1. 在 Azure Databricks 中,登录到工作区。

  2. 单击 “数据”图标。目录

  3. 单击“ 外部数据 > ”按钮,转到“ 凭据 ”选项卡,然后选择“ 创建凭据”。

  4. 选择存储凭据

  5. 选择凭据类型为“Cloudflare API 令牌”。

  6. 输入凭据的名称,以及你在配置 R2 存储桶时复制的以下值:

    • 帐户 ID
    • 访问密钥 ID
    • 机密访问密钥
  7. (可选)如果希望用户对使用此存储凭据的外部位置具有只读访问权限,请在“高级”选项中选择“只读”

    如果要使用存储凭据访问用作复制目标的 R2 存储,请不要选择此选项,如使用 Cloudflare R2 副本或将存储迁移到 R2 中所述。

    有关详细信息,请参阅将存储凭据标记为只读

  8. 单击 “创建”

  9. 在“已创建存储凭据”对话框中,复制“外部 ID”。

  10. (可选)将存储凭据绑定到特定工作区。

    默认情况下,任何连接到元数据存储的工作区中的特权用户均可使用存储凭据。 如果只想允许从特定工作区进行访问,请转到“工作区”选项卡并分配工作区。 请参阅 向特定工作区分配存储凭据

步骤 3:创建外部位置

若要创建外部位置,如果需要使用图形 UI,请使用目录资源管理器;如果希望以编程方式创建,请使用 SQL。

选项 1:使用目录资源管理器创建外部位置

  1. 登录到一个连接到元数据存储的工作区。

  2. 在边栏中,单击 “数据”图标。目录

  3. 单击“ 外部数据 > ”按钮,转到“ 外部位置 ”选项卡,然后单击“ 创建外部位置”。

  4. 在“ 创建新的外部位置 ”对话框中,单击“ 手动”,然后单击 “下一步”。

    不能使用 AWS 快速入门选项为 DBFS 根目录创建外部位置。

  5. “手动创建新外部位置 ”对话框中,输入 外部位置名称

  6. “存储类型”下,选择 “R2”。

  7. URL 下,输入路径。 例如,r2://my-bucket@my-account-id.r2.cloudflarestorage.com

  8. “存储凭据”下,选择授予对外部位置访问权限的存储凭据。

  9. (可选)如果希望用户对外部位置具有只读访问权限,请单击“ 高级选项 ”,然后选择“ 限制”以只读使用。 稍后可以更改此设置。 有关详细信息,请参阅将外部位置标记为只读

  10. (可选)如果外部位置适用于旧工作负荷迁移,请单击“ 高级”选项 并启用 回退模式

    请参阅在外部位置启用回退模式

  11. 单击 “创建”

  12. (可选)将外部位置绑定到特定工作区。

    默认情况下,任何特权用户都可以使用连接到元存储的任何工作空间上的外部位置。 如果只想允许从特定工作区进行访问,请转到“工作区”选项卡并分配工作区。 请参阅 向特定工作区分配外部位置

  13. 转到“权限”选项卡,授予使用外部位置的权限。

    要允许任何人使用该外部位置,必须授予权限:

    • 要使用外部位置将托管存储位置添加到元存储、目录或架构,请授予 CREATE MANAGED LOCATION 权限。
    • 要创建外部表或卷,请授予 CREATE EXTERNAL TABLECREATE EXTERNAL VOLUME
    1. 单击授权
    2. “授权”<external location>对话框中,选择“主体”字段中的用户、组或服务主体,然后选择您想授予的权限。
    3. 单击授权

选项 2:使用 SQL 创建外部位置

若要使用 SQL 创建外部位置,请在笔记本或 SQL 查询编辑器中运行以下命令。 替换占位符值。

  • <location-name>:外部位置的名称。 如果 location_name 包含特殊字符,例如连字符 (-),则它必须用反引号 (` `) 引起来。 请参阅名称
  • <bucket-path>:云租户中此外部位置授予访问权限的路径。 例如,r2://my-bucket@my-account-id.r2.cloudflarestorage.com
  • <storage-credential-name>:授权读取和写入存储桶的存储凭据的名称。 如果存储凭据名称中包含特殊字符,例如连字符 (-),则必须用反引号 (` `) 将其包围起来。
CREATE EXTERNAL LOCATION [IF NOT EXISTS] `<location-name>`
URL '<bucket-path>'
WITH ([STORAGE] CREDENTIAL `<storage-credential-name>`)
[COMMENT '<comment-string>'];

如果要限制对帐户中特定工作区(也称为工作区绑定或外部位置隔离)的外部位置访问,请参阅 向特定工作区分配外部位置