代码之家  ›  专栏  ›  技术社区  ›  Jonathan Simon Prates

Databricks共享访问模式限制

  •  0
  • Jonathan Simon Prates  · 技术社区  · 2 年前

    我有一个交互式集群,其中连接的笔记本必须能够读取/写入Unity Catalog以及DBFS和ADLS中的数据。我已将此群集设置为 USER_ISOLATION (共享模式)。当使用spark从dbfs或abfss读取数据时,我遇到了一个错误:

    SparkConnectGrpcException: (org.apache.spark.SparkSecurityException) [INSUFFICIENT_PERMISSIONS]
    Insufficient privileges: User does not have permission SELECT on any file.
    

    I've granted permissions to my user 仍然会出现这个错误。

    resource "databricks_sql_permissions" "any_file" {
      any_file = true
      catalog  = true
    
      privilege_assignments {
        principal  = "..."
        privileges = ["SELECT"]
      }
    }
    

    Documentations says :

    无法使用R、RDD API或直接从云存储读取数据的客户端,如DBUtils。

    我能假设这是的根本原因吗 INSUFFICIENT_PERMISSIONS 错误

    尽管我理解阻止访问文件系统的决定背后的原因,但在迁移到统一目录的过程中,我们仍然需要同时访问这两者。

    群集配置:

    {
        "num_workers": 1,
        "cluster_name": "...",
        "spark_version": "14.0.x-scala2.12",
        "spark_conf": {
            "spark.hadoop.fs.azure.account.oauth2.client.endpoint": "...",
            "spark.hadoop.fs.azure.account.auth.type": "...",
            "spark.hadoop.fs.azure.account.oauth.provider.type": "...",
            "spark.hadoop.fs.azure.account.oauth2.client.id": "...",
            "spark.hadoop.fs.azure.account.oauth2.client.secret": "..."
        },
        "node_type_id": "...",
        "driver_node_type_id": "...",
        "ssh_public_keys": [],
        "spark_env_vars": {
            "cluster_type": "all-purpose"
        },
        "init_scripts": [],
        "enable_local_disk_encryption": false,
        "data_security_mode": "USER_ISOLATION",
        "cluster_id": "..."
    }
    

    有什么变通办法、解决方案或不同的方法吗? 将群集配置更改为 SINGLE_USER 这不是我们目前想要的,因为多个用户/笔记本正在共享相同的设置。

    0 回复  |  直到 2 年前
        1
  •  1
  •   Alex Ott    2 年前

    您对列出的限制是正确的。但是,当您使用Unity Catalog时,尤其是使用共享集群时,您需要与以前有所不同。UC+共享集群提供了非常好的用户隔离,不允许在没有必要访问控制的情况下访问数据(DBFS根本没有访问控制,ADLS仅在文件级别提供访问控制)。

    您需要改变您的方法:

    • 用于通过访问ADLS上的数据 abfss 你需要创建 external locations 并向您的用户授予相应的权限。
    • 不使用DBFS(无论如何都不建议用于非临时数据),而是允许用户使用 Unity Catalog Volumes -它们可以用于非结构化数据、配置文件、库等。您需要使用单用户集群将数据从DBFS迁移到UC卷,但这应该是一次性活动。

    您可以在中阅读有关UC共享集群的最新功能 this blog post .

    附言:你可以看看 UCX tool from Databricks Labs -它旨在辅助自动迁移到Unity目录。

    推荐文章