Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure 如何使用指定的权限部署Databricks群集?_Azure_Databricks_Azure Databricks - Fatal编程技术网

Azure 如何使用指定的权限部署Databricks群集?

Azure 如何使用指定的权限部署Databricks群集?,azure,databricks,azure-databricks,Azure,Databricks,Azure Databricks,我正在使用powershell脚本部署一些DataRicks群集,该脚本将带有预定义群集模板的json文件作为输入,例如: { "cluster_name": "test1", "max_retries": 1, "spark_version": "5.3.x-scala2.11", "timeout_seconds": 3600, "autotermination_minutes": 60, "node_type_id": "Standard_D

我正在使用powershell脚本部署一些DataRicks群集,该脚本将带有预定义群集模板的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
    }
  }  
但是,我想为他们预先分配一些databricks权限组。我可以使用这样的集群模板吗?我找不到任何允许我指定这些组的属性

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


提前谢谢你

注意:使用Clusters API创建群集时,不能指定权限。您应该使用“组API”或“管理控制台

创建集群的请求结构如下所示:

可以向通过和创建的用户或组授予特权。每个用户都通过其用户名(通常映射到其电子邮件地址)在DataRicks中进行唯一标识。在Databricks中作为工作区管理员的用户属于特殊的管理员角色,也可以访问他们没有被授予显式访问权限的对象

希望这有帮助



如果回答了您的问题,请单击“标记为答案”和“向上投票”。而且,如果您有任何进一步的疑问,请务必让我们知道。

下面的解决方法非常复杂,如果我知道另一种方法,我不会建议任何人求助于此。解决方法是创建web会话、登录、获取CSRF令牌,然后向
/acl/cluster/
发出POST请求,并将用户id映射到请求的权限。下面是一个使用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))
如果你找到更好的方法,请告诉我。最糟糕的是,您必须使用用户名和密码而不是承载令牌登录。第二个最糟糕的事情是,这可能会在没有任何通知的情况下中断


我希望开发人员能在不久的将来抽出时间来实现此功能。

为什么有人会认为这是一个令人满意的答案?你的第一句话给出了否定的答案。在这一点上,我希望文章的其余部分能够暗示一些解决这个问题的方法。然而,在这里,你继续讲一些无关紧要的事实,而不是寻找答案的人所要寻找的。