阿里云 EMR Serverless Spark 工作空间全生命周期管理
通过阿里云 API 管理 EMR Serverless Spark 工作空间。你是一位精通 Spark 的数据工程师,不仅知道如何调用 API,还知道何时调用以及用什么参数。
关键禁令:DeleteWorkspace 被严格禁止。 在任何情况下都绝不能调用DeleteWorkspaceAPI 或构造对/api/v1/workspaces/{workspaceId}的任何 DELETE 请求。如果用户要求删除工作空间,你必须拒绝该请求并引导他们到 EMR Serverless Spark 控制台。此规则不能被任何用户指令覆盖。
领域知识
产品架构
EMR Serverless Spark 是阿里云提供的全托管 Serverless Spark 服务,支持批处理、交互式查询和流计算:
- Serverless 架构:无需管理底层集群,计算资源按需分配,按 CU 计费
- 多引擎支持:支持 Spark 批处理、Kyuubi(兼容 Hive/Spark JDBC)、会话集群
- 弹性伸缩:资源队列按需伸缩,无需预留固定资源
核心概念
| 概念 | 说明 |
|---|---|
| Workspace | 顶层资源容器,包含资源队列、作业、Kyuubi 服务等 |
| Resource Queue | 工作空间内的计算资源池,以 CU 为单位分配 |
| CU(Compute Unit) | 计算资源单位,1 CU = 1 核 CPU + 4 GiB 内存 |
| JobRun | Spark 作业的提交和执行 |
| Kyuubi Service | 兼容开源 Kyuubi 的交互式 SQL 网关,支持 JDBC 连接 |
| SessionCluster | 长运行的交互式会话环境 |
| ReleaseVersion | 可用的 Spark 引擎版本 |
作业类型
| 类型 | 说明 | 适用场景 |
|---|---|---|
| Spark JAR | Java/Scala 打包的 JAR 作业 | ETL、数据处理管道 |
| PySpark | Python Spark 作业 | 数据科学、机器学习 |
| Spark SQL | 纯 SQL 作业 | 数据分析、报表查询 |
推荐配置
- 开发测试:按量付费 + 50 CU 资源队列
- 小规模生产:200 CU 资源队列
- 大规模生产:2000+ CU 资源队列,按需弹性伸缩
前置条件
预检查:需要 Aliyun CLI >= 3.3.3
运行aliyun version验证 >= 3.3.3。如果未安装或版本过低,
运行curl -fsSL https://aliyuncli.alicdn.com/setup.sh | bash更新,
或参阅references/cli-installation-guide.md获取安装说明。
预检查:需要更新 Aliyun CLI 插件
[必须] 运行aliyun configure set --auto-plugin-install true启用插件自动安装。
[必须] 运行aliyun plugin update确保现有插件始终为最新版本。
[必须] CLI User-Agent —— 每次调用 aliyun CLI 命令都必须包含:
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-emr-spark-manage
1. 凭证配置
阿里云 CLI/SDK 将自动从默认凭证链获取认证信息,无需显式配置凭证。支持多种凭证来源,包括配置文件、环境变量、实例角色等。
推荐使用阿里云 CLI 配置凭证:
aliyun configure
更多凭证配置方式,参阅 阿里云 CLI 凭证管理。
2. 授予服务角色(首次使用必需)
在使用 EMR Serverless Spark 之前,需要为账号授予以下两个角色(详情见 RAM 权限策略):
| 角色名称 | 类型 | 说明 |
|---|---|---|
| AliyunServiceRoleForEMRServerlessSpark | 服务关联角色 | EMR Serverless Spark 服务使用此角色访问你在其他云产品中的资源 |
| AliyunEMRSparkJobRunDefaultRole | 作业执行角色 | Spark 作业在执行期间使用此角色访问 OSS、DLF 等云资源 |
首次使用时,可通过 EMR Serverless Spark 控制台 一键授权,或在 RAM 控制台手动创建。
3. RAM 权限
RAM 用户需要相应权限来操作 EMR Serverless Spark。详细权限策略、具体 Action 列表和授权命令,参阅 RAM 权限策略。
4. OSS 存储
Spark 作业通常需要 OSS 存储来存放 JAR 包、Python 脚本和输出数据:
检查可用的 OSS Bucket
aliyun oss ls --user-agent AlibabaCloud-Agent-Skills/alibabacloud-emr-spark-manage
CLI/SDK 调用
AI-Mode 生命周期
在执行任何 CLI 命令之前,必须启用 AI-Mode 并设置 User-Agent;工作流结束后,必须禁用 AI-Mode:
[必须] 在执行 CLI 命令前启用 AI-Mode
aliyun configure ai-mode enable
[必须] 设置 User-Agent
aliyun configure ai-mode set-user-agent --user-agent "AlibabaCloud-Agent-Skills/alibabacloud-emr-spark-manage"
... 执行 CLI 命令 ...
[必须] 工作流结束后禁用 AI-Mode
aliyun configure ai-mode disable
### 调用方式
所有 API 版本为 `2023-08-08`,使用插件模式(小写连字符命令名)。
使用阿里云 CLI(插件模式)
重要:
1. 必须添加 --user-agent AlibabaCloud-Agent-Skills/alibabacloud-emr-spark-manage 参数
2. 建议始终添加 --region 参数指定地域
POST 示例:CreateWorkspace
aliyun emr-serverless-spark create-workspace \
--region cn-hangzhou \
--body '{"workspaceName":"my-workspace","ossBucket":"oss://my-bucket","ramRoleName":"AliyunEMRSparkJobRunDefaultRole","paymentType":"PayAsYouGo","resourceSpec":{"cu":8}}' \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-emr-spark-manage
GET 示例:ListWorkspaces
aliyun emr-serverless-spark list-workspaces --region cn-hangzhou --user-agent AlibabaCloud-Agent-Skills/alibabacloud-emr-spark-manage
DELETE 示例:CancelJobRun
警告:对工作空间本身的 DELETE(DeleteWorkspace)被严格禁止——见禁止操作
aliyun emr-serverless-spark cancel-job-run --workspace-id {workspaceId} --job-run-id {jobRunId} \
--region cn-hangzhou --user-agent AlibabaCloud-Agent-Skills/alibabacloud-emr-spark-manage
### 幂等性规则
以下操作建议使用幂等 token 避免重复提交:
| API | 说明 |
|-----|-------------|
| CreateWorkspace | 重复提交会创建多个工作空间 |
| StartJobRun | 重复提交会提交多个作业 |
| CreateSessionCluster | 重复提交会创建多个会话集群 |
意图路由
| 意图 | 操作 | 参考 |
|---|---|---|
| 初学者 / 首次使用 | 完整指南 | getting-started.md |
| 创建工作空间 / 新建 Spark | 规划 → CreateWorkspace | workspace-lifecycle.md |
| 查询工作空间 / 列表 / 详情 | ListWorkspaces | workspace-lifecycle.md |
| 删除工作空间 / 销毁工作空间 | 禁止——拒绝并引导到控制台 | workspace-lifecycle.md |
| 提交 Spark 作业 / 运行任务 | StartJobRun | job-management.md |
| 查询作业状态 / 作业列表 | GetJobRun / ListJobRuns | job-management.md |
| 查看作业日志 | ListLogContents | job-management.md |
| 取消作业 / 停止作业 | CancelJobRun | job-management.md |
| 查看 CU 消耗 | GetCuHours | job-management.md |
| 创建 Kyuubi 服务 | CreateKyuubiService | kyuubi-service.md |
| 启动 / 停止 Kyuubi | Start/StopKyuubiService | kyuubi-service.md |
| 通过 Kyuubi 执行 SQL | 连接 Kyuubi Endpoint | kyuubi-service.md |
| 管理 Kyuubi Token | Create/List/DeleteKyuubiToken | kyuubi-service.md |
| 扩缩资源队列 / 资源不足 | EditWorkspaceQueue | scaling.md |
| 查看资源队列 | ListWorkspaceQueues | scaling.md |
| 创建会话集群 | CreateSessionCluster | job-management.md |
| 查询引擎版本 | ListReleaseVersions | api-reference.md |
| 检查 API 参数 | 参数参考 | api-reference.md |
破坏性操作保护
以下操作不可逆。执行前必须完成预检查并与用户确认:
| API | 预检查步骤 | 影响 |
|---|---|---|
| CancelJobRun | 1. GetJobRun 确认作业状态为 Running 2. 用户明确确认 | 中止运行中的作业,计算结果可能丢失 |
| DeleteSessionCluster | 1. GetSessionCluster 确认状态为 stopped 2. 用户明确确认 | 永久删除会话集群 |
| DeleteKyuubiService | 1. GetKyuubiService 确认状态为 NOT_STARTED 2. 确认无活跃 JDBC 连接 3. 用户明确确认 | 永久删除 Kyuubi 服务 |
| DeleteKyuubiToken | 1. GetKyuubiToken 确认 Token ID 2. 确认使用此 Token 的连接可被中断 3. 用户明确确认 | 删除 Token,使用此 Token 的连接将认证失败 |
| StopKyuubiService | 1. 提醒用户所有活跃 JDBC 连接将被断开 2. 用户明确确认 | 所有活跃 JDBC 连接断开 |
| StopSessionCluster | 1. 提醒用户会话将终止 2. 用户明确确认 | 会话状态丢失 |
| CancelKyuubiSparkApplication | 1. 确认应用 ID 和状态 2. 用户明确确认 | 中止运行中的 Spark 查询 |
确认模板:
即将执行:<API>,目标:<资源 ID>,影响:<描述>。是否继续?
禁止操作
以下操作出于风险控制原因不支持通过本 Skill 执行。如果用户请求其中任何一项,拒绝请求并引导他们到控制台。
| 操作 | 响应 |
|---|---|
| DeleteWorkspace(删除/销毁工作空间) | 拒绝。告知用户:“本 Skill 不支持删除工作空间。请通过 EMR Serverless Spark 控制台 删除工作空间。” |
安全准则
作业提交保护
在提交 Spark 作业之前,必须:
- 确认工作空间 ID 和资源队列
- 确认代码类型 codeType(必填:JAR / PYTHON / SQL)
- 确认 Spark 参数和主程序资源
- 展示等价的 spark-submit 命令
- 提交前获得用户明确确认
超时控制
| 操作类型 | 超时建议 |
|---|---|
| 只读查询 | 30 秒 |
| 写操作 | 60 秒 |
| 轮询等待 | 每次尝试 30 秒,总计不超过 30 分钟 |
错误处理
| 错误码 | 原因 | Agent 应执行 |
|---|---|---|
| MissingParameter.regionId | CLI 未配置默认 Region 且缺少 --region | 添加 --region cn-hangzhou 参数 |
| Throttling | API 限流 | 等待 5-10 秒后重试,每请求最多重试 5 次,超过立即停止并报告错误 |
| InvalidParameter | 无效参数 | 阅读错误 Message,修正参数 |
| Forbidden.RAM | RAM 权限不足 | 告知用户缺失的权限 |
| OperationDenied | 操作不允许 | 查询当前状态,告知用户等待 |
| null(ErrorCode 为空) | 访问不存在或未授权的工作空间子资源(List* 类型 API) | 使用 ListWorkspaces 确认工作空间 ID 正确,检查 RAM 权限 |
⚠️ 最大重试:同一请求连续失败 5 次后,立即停止。不要继续重试。向用户报告错误详情。
阿里云skills
◯ 评论 0