ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Stage Resource:Presto 查询阶段(Stage)REST 接口深度解析

Stage Resource:Presto 查询阶段(Stage)REST 接口深度解析 大数据数据库后端【免费下载链接】prestoThe official home of the Presto distributed SQL query engine for big data项目地址https://gitcode.com/gh_mirrors/pre/presto点击查看免费下载Stage Resource 是 Presto 提供给用户和运维工具的一套 HTTP 接口用于获取查询中某个 Stage阶段的详情以及按需取消删除正在执行的 Stage。本文以官方文档 presto-docs/src/main/sphinx/rest/stage.rst 为骨架结合本仓库源码深入讲解这两个接口的语义、参数格式、调用方式与底层实现链路帮助你掌握通过 REST API 监控和干预 Presto 分布式查询执行的方法。1. 接口总览Stage Resource 暴露在 Presto coordinator 的/v1/stage路径下包含两个接口方法路径作用GET/v1/stage返回 Presto 查询中某个 Stage 的详细信息DELETE/v1/stage/{stageId}删除取消Presto 查询中的某个 Stage这两个接口与 Query Resource、Task Resource、Node Resource 等共同组成了 Presto 面向管理监控的 REST API 体系。其中Stage 是 Presto 执行模型中的关键概念一条 SQL 查询会被拆分为多个 Stage例如根输出 Stage、聚合 Stage、表扫描 Stage每个 Stage 由分布在集群各节点上的 Task 组成。因此能够按 Stage 粒度查看状态和取消执行是运维大规模分布式查询的重要能力。2. 两个接口逐一解析2.1GET /v1/stage— 获取 Stage 详情原文档描述Returns detail about a stage in a Presto query.即该接口返回某条查询中指定 Stage 的详细执行信息。从调用语义上看它服务于两类场景监控与诊断通过浏览器或脚本查看某个 Stage 下各 Task 的状态、输入输出数据量、CPU 时间、内存占用等统计信息定位慢 Stage 或数据倾斜二次开发作为工具链如自定义 Web UI、监控报警系统获取执行细节的数据源。需要注意文档中GET /v1/stage没有带路径参数说明这是一个“查询入口”Stage 详情通常在更大的查询信息结构中获取。在实践中更常见的做法是通过GET /v1/query/{queryId}拿到查询的outputStage树其中每个StageInfo节点通过stageId、self等字段就包含了对应 Stage 的状态和统计也可直接浏览 Presto coordinator 的 Web 界面查看渲染后的查询执行树。从源码层面看QueryStateMachine 中通过pruneStageExecutionInfo对 Stage 信息进行剪枝仅保留根输出 StageoutputStage并注释明确说明Remove the substages——即对外暴露的查询信息结构以输出 Stage 为根、向下展开整个 Stage 树这正是 Stage 详细信息的载体。2.2DELETE /v1/stage/{stageId}— 删除取消Stage原文档描述Deletes a stage in a Presto query.即通过DELETE方法按stageId取消查询中指定的 Stage。这是本 Resource 在源码中实际实现的核心动作也是运维介入分布式查询执行、及时释放集群资源的重要手段例如发现某个 Stage 长时间卡死或数据倾斜时可以定向取消。两个接口都要求调用者具备相应权限在源码中StageResource类声明了RolesAllowed(USER)见 StageResource.java即仅允许具备USER角色的认证用户访问这也是 Presto 安全模型中 REST 接口访问控制的一部分。3.stageId的格式与解析规则DELETE /v1/stage/{stageId}中的stageId由查询 ID 整数序号组成格式为queryId.stageNumber例如20231229_120000_00001_abcde.2其中queryId是这条查询的全局唯一标识形如20131229_211533_00017_dk5x2点号后的整数是该查询内部 Stage 的序号从 0 开始非负。该解析规则在 StageId.java 中有完整实现JsonCreator public static StageId valueOf(String stageId) { ListString ids QueryId.parseDottedId(stageId, 2, stageId); return valueOf(ids); } public static StageId valueOf(ListString ids) { checkArgument(ids.size() 2, Expected two ids but got: %s, ids); return new StageId(new QueryId(ids.get(0)), Integer.parseInt(ids.get(1))); }关键细节通过QueryId.parseDottedId(stageId, 2, stageId)以点号为分隔符拆成恰好两个部分数量不对会直接抛异常第二部分必须是非负整数构造函数中有checkArgument(id 0, id is negative: %s, id)校验见 StageId.java该 ID 同时支持 JSON 反序列化JsonCreator与 Thrift 序列化ThriftStruct/ThriftField说明它不仅在 REST 层使用也用于 Presto 内部节点间通信。# 取消查询 abcde.2 中的第 2 个 Stage注意实际 queryId 为完整格式 curl -X DELETE http://coordinator-host:8080/v1/stage/20131229_211533_00017_dk5x2.24. 底层实现从 REST 请求到 Stage 取消4.1 REST 层的请求映射StageResource是 JAX-RS 风格的资源类StageResource.javaPath(/v1/stage) RolesAllowed(USER) public class StageResource { private final QueryManager queryManager; Inject public StageResource(QueryManager queryManager) { ... } DELETE Path({stageId}) public void cancelStage(PathParam(stageId) StageId stageId) { requireNonNull(stageId, stageId is null); queryManager.cancelStage(stageId); } }要点Path({stageId})将 URL 路径中的stageId段绑定到PathParam并由框架自动调用StageId.valueOf完成字符串到对象的转换依赖注入QueryManager通过Inject构造器注入com.facebook.presto.execution.QueryManager实现资源层与执行管理层的解耦值得注意的是该类中并未实现GET /v1/stage的 JAX-RS 方法——文档描述的两个接口中真正落到这段源码的是DELETE操作而 Stage 详情数据的获取实际发生在QueryManager.getQueryInfo(...)返回的outputStage树结构中详见第 2.1 节。4.2 执行管理层按 queryId 定位并取消QueryManager.cancelStage(StageId)的实现在 SqlQueryManager.javaOverride public void cancelStage(StageId stageId) { requireNonNull(stageId, stageId is null); log.debug(Cancel stage %s, stageId); queryTracker.tryGetQuery(stageId.getQueryId()) .ifPresent(query - query.cancelStage(stageId)); }调用链可以概括为DELETE /v1/stage/{stageId} └─ StageResource.cancelStage() REST 层参数解析 └─ QueryManager.cancelStage() 接口定义见 QueryExecution.java#L94 对应声明 └─ SqlQueryManager.cancelStage() 按 stageId.getQueryId() 找到查询 └─ QueryExecution.cancelStage() 真正的 Stage 取消逻辑设计要点用 queryId 而非 stageId 定位查询cancelStage先通过stageId.getQueryId()取出所属查询 ID再在queryTracker中查找对应的QueryExecution找不到则静默忽略ifPresent——这保证了即使 Stage 已被清理DELETE 请求也不会抛错与取消整个查询的区别cancelQuery(QueryId)会终止整条查询同上文件中第 339-345 行而cancelStage(StageId)只针对查询内的单个 Stage粒度更细QueryExecution接口中对cancelStage的声明见 QueryExecution.java表明这是一个跨 REST 层与执行引擎层的标准能力。5. 与周边 REST 资源的关系Stage Resource 不是孤立的它与 Presto 的 REST API 家族协同工作资源路径定位Stage Resource/v1/stage、/v1/stage/{stageId}Stage 详情与取消Query Resource/v1/query、/v1/query/{queryId}查询级信息与统计是获取 Stage 树详情的入口Task Resource/v1/task系列Task 级调度与状态Node Resource/v1/node集群节点信息一条典型的运维排查流程是GET /v1/query列出当前运行查询找到目标queryIdGET /v1/query/{queryId}查看outputStage树定位需要关注的 Stage 及其stageId其中包含各 Task 的状态、totalCpuTime、processedInputDataSize等统计字段字段语义可参考 query.rst 中queryStats的示例若确认某 Stage 需要终止调用DELETE /v1/stage/{queryId.stageNumber}定向取消。6. 使用注意事项仅在 coordinator 上暴露/v1/stage由 coordinator 侧的StageResource提供worker 节点不处理该路径需要认证接口标注RolesAllowed(USER)在启用认证的集群中未授权调用会返回 403取消是异步的cancelStage通过queryTracker找到查询后调用query.cancelStage(stageId)实际的 Stage 终止由执行引擎异步完成DELETE 请求本身不保证立即返回最终状态参数格式敏感stageId必须是queryId.非负整数缺段、多段或序号非数字都会导致参数解析失败GET 详情的正确入口如需获取 Stage 详情建议优先使用GET /v1/query/{queryId}返回的outputStage结构即 Stage 树这比直接调用GET /v1/stage信息更完整、可解析。7. 小结Stage Resource 是 Presto REST API 中面向查询内执行单元的管理入口GET /v1/stage承载 Stage 详情查询的语义详情数据在实际查询信息结构中以outputStage树呈现DELETE /v1/stage/{stageId}则实现按 Stage 粒度的定向取消。通过 StageResource.java、SqlQueryManager.java 与 StageId.java 三处源码可以完整串起HTTP 请求 → 参数解析 → 查询定位 → Stage 取消的调用链。掌握这套接口是构建 Presto 查询监控、诊断与运维自动化能力的基础一环。赞分享大数据数据库后端【免费下载链接】prestoThe official home of the Presto distributed SQL query engine for big data项目地址https://gitcode.com/gh_mirrors/pre/presto点击查看免费下载相关推荐awesome-serverless 隐藏玩法无头浏览器、二维码服务、短信登录、DPlayer 弹幕等创意应用awesome serverless 隐藏玩法无头浏览器、二维码服务、短信登录、DPlayer 弹幕等创意应用 awesome serverless 是腾讯云AWS CLI 实战使用 apigateway delete-stage 删除 API Gateway 阶段StageAWS CLI 实战使用 apigateway delete stage 删除 API Gateway 阶段Stage 本文以 AWS CLI 官方示例开发工具云原生运维使用 AWS CLI 查询 API Gateway Stageget-stage 命令完整实战与字段深度解析使用 AWS CLI 查询 API Gateway Stageget stage 命令完整实战与字段深度解析 本指南以 AWS CLI 官方示例文档 awsc开发工具云原生运维创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表