借助基于 Managed Service for Apache Spark 服务账号的安全多租户,您可以与多个用户共享集群,并在创建集群时将一组用户账号映射到服务账号。用户可以将交互式工作负载(例如 Jupyter 笔记本)提交到在具有隔离的用户环境的多租户集群上运行的内核。
当用户将作业提交到多租户集群时:
作业以具有特定 Kerberos 主账号的特定操作系统用户身份运行。
作业使用 Google Cloud 映射的服务帐号访问资源。
本文档介绍了如何创建 Managed Service for Apache Spark 多租户集群,然后启动 Jupyter 笔记本并将其连接到在集群上运行的 PySpark 内核。
注意事项和限制
创建多租户集群时:
集群仅适用于具有映射服务账号的 Google 账号用户。无法映射 Google 群组。未映射的用户无法在集群上运行作业。
在该集群上启用并配置 Kerberos,可实现集群内通信。 不支持通过 Kerberos 进行最终用户身份验证。
对集群和 Compute Engine 功能的直接 SSH 访问(例如,在集群虚拟机上运行启动脚本的功能)都会被屏蔽。此外,作业无法使用
sudo权限运行。不支持 Managed Service for Apache Spark 工作流 。
创建多租户集群
创建 Managed Service for Apache Spark 集群时,您可以启用多租户功能。
控制台
使用 Google Cloud 控制台创建集群, 如下所示:
- 在 Google Cloud 控制台中,前往创建集群 页面。
- 点击其他配置 以展开该部分。
- 修改可选组件 。
- 选中在界面中启用组件 复选框以启用组件界面,然后选中 Jupyter 内核网关 的复选框。
- 点击保存 。
- 修改自定义及其他 。
- 如需允许在不重新创建集群的情况下添加或移除多租户用户 (请参阅更新多租户集群用户), 请在集群属性 部分中点击 + 添加属性。
- 添加以下属性:前缀:
dataproc,键:dataproc.dynamic.multi.tenancy.enabled,值:true建议 :由于 YARN 会为在多租户集群上运行的每个 笔记本内核占用大量集群资源,因此请添加 Spark 和 YARN 属性以 增加资源分配。
示例:
前缀 键 值 spark spark.driver.memory 5g spark spark.executor.memory 5g spark spark.executor.cores 2 capacity-scheduler yarn.scheduler.capacity.maximum-am-resource-percent 0.5 - 点击保存 。
- 修改安全 。
- 在项目访问权限下,选中为此集群启用 cloud-platform 范围的复选框。
- 在安全多租户 下,选择启用 。
- 在多租户映射 下,点击添加多租户映射 ,以将用户账号映射到服务账号。
- 点击保存 。
- 确认其他设置,然后点击创建集群 。
gcloud
使用 gcloud dataproc clusters create command 和
--secure-multi-tenancy-user-mapping
标志指定用户账号到服务账号的映射列表。
gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ --secure-multi-tenancy-user-mapping=USER_MAPPINGS: \ --properties "dataproc:dataproc.dynamic.multi.tenancy.enabled=true" \ --service-account=CLUSTER_SERVICE_ACCOUNT@ \ --scopes=https://www.googleapis.com/auth/iam \ --optional-components=JUPYTER_KERNEL_GATEWAY \ --enable-component-gateway \ other args ...
注意:
USER_MAPPINGS:指定将用户账号映射到服务账号的英文逗号分隔列表。
使用 YAML 映射文件:您可以使用--secure-multi-tenancy-user-mapping=UserA@my-company.com:SERVICE_ACCOUNT_FOR_USERA@,UserB@my-company.com:SERVICE_ACCOUNT_FOR_USERB@,UserC@my-company.com:SERVICE_ACCOUNT_FOR_USERC@
--identity-config-file标志指定包含用户账号到服务账号的映射的本地或 Cloud Storage YAML 文件,而不是使用--secure-multi-tenancy-user-mapping标志指定该映射。 映射文件中的每一行都会将一个用户账号映射到一个服务账号。第一行包含--identity-config-file=LOCAL_FILE or gs://BUCKET/FOLDER/FILENAME
user_service_account_mapping:标头。user_service_account_mapping: UserA@my-company.com:SERVICE_ACCOUNT_FOR_USERA@ UserB@my-company.com:SERVICE_ACCOUNT_FOR_USERB@ UserC@my-company.com:SERVICE_ACCOUNT_FOR_USERC@
--properties "dataproc:dataproc.dynamic.multi.tenancy.enabled=true":此属性允许在不重新创建集群的情况下添加或移除多租户集群用户(请参阅更新多租户集群用户)。建议 :由于 YARN 会为在多租户集群上运行的每个 笔记本内核占用大量集群资源,因此请添加 Spark 和 YARN 属性以 增加资源分配。
示例:
--properties=" \ spark:spark.driver.memory=5g,\ spark:spark.executor.memory=5g,\ spark:spark.executor.cores=200, \ capacity-scheduler:yarn.scheduler.capacity.maximum-am-resource-percent=0.5"
CLUSTER_SERVICE_ACCOUNT(可选):您可以使用
--service-account flag为集群指定 自定义虚拟机服务账号。如果省略此标志,系统会使用默认的集群虚拟机服务账号PROJECT_NUMBER-compute@。建议:为不同的集群使用不同的集群服务账号,以使每个集群服务账号只能模拟有限的一组已映射的用户服务账号。
集群服务帐号需要
--scopes=https://www.googleapis.com/auth/iam才能执行模拟操作。--enable-component-gateway和--optional-components=JUPYTER_KERNEL_GATEWAY:启用 Managed Service for Apache Spark 组件网关和 Jupyter 内核网关可让多个用户将其 Jupyter 笔记本连接到多租户集群。
API
使用 SecurityConfig.IdentityConfig.userServiceAccountMapping field
指定用户账号到服务帐号的映射列表。
授予 Identity and Access Management 权限
如需将用户笔记本连接到在多租户集群上运行的笔记本内核,已映射的用户、已映射的服务账号和集群虚拟机服务账号必须拥有访问资源所需的 IAM 权限。
已映射的用户权限
每个已映射的用户都必须拥有 dataproc.clusters.get 和 dataproc.clusters.use 权限,用户需要这些权限才能访问并连接到在多租户集群上运行的笔记本内核。您可以授予
Managed Service for Apache Spark Editor 角色 (roles/dataproc.editor),
该角色包含这些权限(请参阅授予单个 IAM 角色),
或者创建具有这些
权限的自定义角色。
已映射的服务帐号权限
每个已映射的服务账号都必须拥有已映射的用户笔记本应用所需的权限,例如对 Cloud Storage 存储桶或 BigQuery 表的访问权限(请参阅管理对服务账号的访问权限)。
虚拟机服务帐号权限
多租户集群虚拟机服务账号必须拥有每个已映射的服务账号的 iam.serviceAccounts.getAccessToken 权限。您可以授予提供此权限的
Service Account Token Creator 角色 (roles/iam.serviceAccountTokenCreator)(请参阅管理对服务账号的访问权限),
或创建具有此权限的自定义角色。
如需了解其他虚拟机服务帐号角色,请参阅 Managed Service for Apache Spark 虚拟机服务账号
。
将 Jupyter 笔记本连接到多租户集群内核
已映射的多租户集群用户可以将其 Vertex AI Workbench Jupyter 笔记本或用户管理的 Jupyter 笔记本连接到安装在多租户集群上的内核。
Vertex AI 笔记本
如需创建 Jupyter 笔记本并将其连接到多租户集群,请执行以下操作:
- 创建 Vertex AI Workbench 实例。
- 在 Workbench 实例标签页上,点击实例的打开 JupyterLab 链接。
- 在 Dataproc 集群笔记本 下,点击
PySpark (YARN 集群) on
MULTI_TENANCY_CLUSTER_NAME卡片,以连接并启动新的 Jupyter PySpark 笔记本。
用户管理的笔记本
如需创建用户管理的 Jupyter 笔记本并将其连接到 Managed Service for Apache Spark 多租户集群,请按照 在用户管理的虚拟机上安装 JupyterLab 扩展程序 的步骤操作。
更新多租户集群用户(预览版)
如果您在创建多租户集群时将 dataproc:dataproc.dynamic.multi.tenancy.enabled 集群属性
设置为 true,则可以在创建集群后添加、移除或替换多租户集群用户。
添加用户
以下更新命令使用 --add-user-mappings 标志向安全多租户集群添加两个新的用户账号到服务帐号的映射。
gcloud dataproc clusters update CLUSTER_NAME \ --region=REGION \ --add-user-mappings=new-user1@my-company.com=SERVICE_ACCOUNT_FOR_NEW_USER1@,new-user2@my-company.com=SERVICE_ACCOUNT_FOR_NEW_USER2@
移除用户
以下更新命令使用 --remove-user-mappings 标志从多租户集群中移除两个用户。该标志接受要移除的用户的用户账号。
gcloud dataproc clusters update CLUSTER_NAME \ --region=REGION \ --remove-user-mappings=UserB@my-company.com,UserC@my-company.com
替换用户
您可以将更新命令与 --identity-config-file 标志结合使用,将一组现有用户替换为一组新用户。此标志可用于通过一个更新命令同时添加和移除用户。
gcloud dataproc clusters update CLUSTER_NAME \ --region=REGION \ --identity-config-file=identity-config.yaml
注意:
--identity-config-file:指定包含新的用户账号到服务账号映射的本地 YAML 文件或 Cloud Storage YAML 文件。 映射文件中的每一行都会将一个用户账号映射到一个服务账号。第一行包含--identity-config-file=LOCAL_FILE or gs://BUCKET/FOLDER/FILENAME
user_service_account_mapping:标头。user_service_account_mapping: new-user1@my-company.com:SERVICE_ACCOUNT_FOR_NEW_USER1@ new-user2@my-company.com:SERVICE_ACCOUNT_FOR_NEW_USER2@