我正在使用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
}
}
但是,我想给他们预分配一些数据块许可组。我可以使用这样的集群模板吗?我找不到任何可以指定这些组的属性。
我可以转到具有手动分配权限的集群之一,并将其导出为json。但是,在这种情况下,模板中也缺少这些内容。
提前谢谢!
答案 0 :(得分:1)
接下来的解决方法是如此无用,如果我知道另一种方法,我不建议任何人诉诸此方法。解决方法是创建一个Web会话,登录,获取CSRF令牌,然后向/acl/cluster/<cluster_id>
发出POST请求,并提供一个user_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))
如果您找到更好的方法,请告诉我。最糟糕的是,您必须使用用户名和密码而不是承载令牌登录。第二坏的事情是,这可能会在没有任何通知的情况下中断。
我希望开发人员会在不久的将来找到时间来实现此功能。
答案 1 :(得分:0)
注意:使用Clusters API创建集群时,您无法指定权限。您应该使用“ 组API ”或“ 管理控制台”
创建集群的请求结构如下:
可以将特权授予通过groups API和Admin Console创建的用户或组。每个用户通过Databricks中的用户名(通常映射到其电子邮件地址)唯一标识。在Databricks中是工作区管理员的用户属于特殊的管理员角色,他们还可以访问未获得其明确访问权限的对象。
希望这会有所帮助。
如果这回答了您的查询,请同时单击“标记为答案”和“上投票”。而且,如果您还有其他疑问,请告诉我们。