azure - 如何部署指定权限的Databricks集群?

标签 azure databricks azure-databricks

我正在使用 powershell 脚本部署一些 Databricks 集群,该脚本采用带有预定义集群模板的输入 json 文件,例如:

{
    "cluster_name": "test1",
    "max_retries": 1,
    "spark_version": "5.3.x-scala2.11",
    "timeout_seconds": 3600,
    "autotermination_minutes": 60,
    "node_type_id": "Standard_DS3_v2",
    "driver_node_type_id": "Standard_DS3_v2",
    "spark_env_vars": {
      "PYSPARK_PYTHON": "/databricks/python3/bin/python3"
    },
    "spark_conf": {
      "spark.databricks.delta.preview.enabled": "true"
    },
    "autoscale": {
      "max_workers": 4,
      "min_workers": 2
    }
  }  

但是,我想为他们预先分配一些数据 block 权限组。我可以使用这样的集群模板来做到这一点吗?我找不到任何允许我指定这些组的属性。

我可以转到手动分配权限的集群之一,并将其​​导出为 json。但是,在这种情况下,模板中也缺少这些内容。

提前谢谢您!

最佳答案

接下来的解决方法非常麻烦,如果我知道另一种方法,我不会建议任何人采用这种方法。解决方法是创建一个 Web session ,登录,获取 CSRF token ,然后向 /acl/cluster/<cluster_id> 发出 POST 请求。带有来自 user_id 的 map s 到请求的权限。以下是使用 Python 为单个用户(或组)设置单个集群上的所有权限的示例:

import json

import requests

DB_HOST = "db-cluster"
DB_USER = "user"
DB_PASS = "pass"

def change_acl(user_id, cluster_id):
    host = DB_HOST
    username = DB_USER
    password = DB_PASS
    session = requests.Session()
    login_request = session.post("https://{}/j_security_check".format(host),
                                 data={"j_username": username, "j_password": password})
    if login_request.status_code >= 400:
        raise Exception("login failed : {}".format(login_request.content))

    config_request = session.get("https://{}/config".format(host))

    if config_request.status_code >= 400:
        raise Exception("config request failed : {}".format(config_request.content))

    config = json.loads(config_request.content)
    csrf_token = config['csrfToken']

    acl_request = session.post(
        "https://{}/acl/cluster/{}".format(host, cluster_id),
        headers={
            "X-CSRF-Token": csrf_token,
            "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
        },
        data=json.dumps({
            "type": "set",
            'permissions': {user_id: ["*"]}
        })
    )
    if acl_request.status_code >= 400:
        raise Exception("acl request failed : {}".format(acl_request.content))

如果您找到更好的方法,请告诉我。最糟糕的是您必须使用用户名和密码而不是不记名 token 登录。第二个最糟糕的事情是,这可能会在没有任何通知的情况下中断。

我希望开发者能在不久的将来抽出时间来实现这个功能。

关于azure - 如何部署指定权限的Databricks集群?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57956072/

相关文章:

asp.net - 从 Web 应用程序在 Azure 中生成新进程

azure - 如何在Azure表存储中通过partitionkey进行查询?

apache-spark-sql - 在 azure 数据 block 中查询 sql server 表

azure - 如何使用 azure CLI 检查 azure 资源是否已在使用?

c# - web.config、web.debug.config、web.release.config 和发布与调试?

azure - 如何防止重复条目进入Azure存储的Delta Lake

apache-spark - 如何将基本身份验证传递给 Confluent Schema Registry?

scala - 错误 : bulkCopyToSqlDB is not a member of org. apache.spark.sql.DataFrameWriter

azure - 作业终止后,如何将生成的文件从 Azure Databricks 导出到 Azure DevOps?

python - Azure 和 Databricks 寄予厚望