关于 alibabacloud-emr-spark-manage
用于通过 Alibaba Cloud API 管理 EMR Serverless Spark 工作区及其相关资源的技能,面向 Spark 数据工程师。支持作业、资源队列、Kyuubi 和会话集群管理;工作区删除操作明确禁止。
主要功能
- 01创建和查询工作区
- 02提交、查询及取消 Spark 作业
- 03查看作业日志与 CU 用量
- 04管理 Kyuubi 服务和令牌
- 05管理资源队列与会话集群
适用场景
- 01创建工作区并提交 Spark 作业
- 02排查作业状态并查看运行日志
- 03调整资源队列以满足资源需求
- 04管理交互式 SQL 服务和会话集群
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ aliyun/ alibabacloud-aiops-skills --skill alibabacloud-emr-spark-manage安装后在 Claude Code 中输入/alibabacloud-emr-spark-manage确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/api-reference.mdgetting-started.mdjob-management.mdkyuubi-service.mdram-policies.mdscaling.mdworkspace-lifecycle.md详细介绍
阿里云 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)、会话集群
- 弹性扩缩:资源队列按需扩缩,无需预留固定资源
核心概念
| 概念 | 说明 |
|---|---|
| 工作空间 | 顶层资源容器,包含资源队列、作业、Kyuubi 服务等 |
| 资源队列 | 工作空间内的计算资源池,按 CU 分配 |
| CU(计算单元) | 计算资源单位,1 CU = 1 个核心 CPU + 4 GiB 内存 |
| JobRun | Spark 作业的提交与执行 |
| Kyuubi 服务 | 兼容开源 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. 凭证配置
Alibaba Cloud CLI/SDK 会自动从默认凭证链获取身份验证信息,无需显式配置凭证。支持多种凭证来源,包括配置文件、环境变量、实例角色等。
建议使用 Alibaba Cloud CLI 配置凭证:
aliyun configure
有关更多凭证配置方式,请参阅 Alibaba Cloud 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 脚本和输出数据:
# Check for available OSS Buckets
aliyun oss ls --user-agent AlibabaCloud-Agent-Skills/alibabacloud-emr-spark-manage
CLI/SDK 调用
AI-Mode 生命周期
执行任何 CLI 命令前,必须启用 AI-Mode 并设置 User-Agent;工作流结束后,必须禁用 AI-Mode:
# [MUST] Enable AI-Mode before executing CLI commands
aliyun configure ai-mode enable
# [MUST] Set User-Agent
aliyun configure ai-mode set-user-agent --user-agent "AlibabaCloud-Agent-Skills/alibabacloud-emr-spark-manage"
# ... execute CLI commands ...
# [MUST] Disable AI-Mode after workflow ends
aliyun configure ai-mode disable
调用方式
所有 API 的版本均为 2023-08-08,使用插件模式(命令名称采用小写并以连字符分隔)。
# Using Alibaba Cloud CLI (plugin mode)
# Important:
# 1. Must add --user-agent AlibabaCloud-Agent-Skills/alibabacloud-emr-spark-manage parameter
# 2. Recommend always adding --region parameter to specify region
# POST example: 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 example: ListWorkspaces
aliyun emr-serverless-spark list-workspaces --region cn-hangzhou --user-agent AlibabaCloud-Agent-Skills/alibabacloud-emr-spark-manage
# DELETE example: CancelJobRun
# WARNING: DELETE on workspace itself (DeleteWorkspace) is STRICTLY PROHIBITED — see Prohibited Operations
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
幂等性规则
对于以下操作,建议使用幂等令牌以避免重复提交:
| 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 端点 | 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 确认状态为已停止 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>,目标:<Resource ID>,影响:<Description>。是否继续?
禁止的操作
出于风险控制原因,此技能不支持以下操作。若用户请求执行其中任何一项,请拒绝请求并引导用户前往控制台。
| 操作 | 响应 |
|---|---|
| DeleteWorkspace(删除/销毁工作空间) | 拒绝。告知用户:“此技能不支持删除工作空间。请通过 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 次后,立即停止。不要继续重试。向用户报告错误详情。