尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Presto Web 界面(Web Interface)完全指南:查询监控、状态解析与运维排查

Presto Web 界面(Web Interface)完全指南:查询监控、状态解析与运维排查 Presto Web 界面Web Interface完全指南查询监控、状态解析与运维排查【免费下载链接】prestoThe official home of the Presto distributed SQL query engine for big data项目地址: https://gitcode.com/gh_mirrors/pre/prestoPresto 分布式 SQL 查询引擎内置了一套基于浏览器的 Web 界面用于监控集群上正在执行与已经完成的所有查询并在查询详情页中深入剖析每个查询的执行阶段、任务分布与时间消耗。本文以官方文档 admin/web-interface.rst 为主线结合仓库中查询状态枚举、REST 端点与前端组件的源码实现帮助你掌握 Web 界面的访问方式、查询状态语义、BLOCKED 状态排查思路以及详情页可视化与 JSON 调试能力。Web 界面的访问方式与 HTTP 端口配置Presto 的 Web 界面运行在coordinator协调节点上通过 HTTP 协议对外提供服务访问地址由 coordinator 配置文件中http-server.http.port参数决定。以仓库自带的开发配置 presto-main/etc/config.properties 为例# 示例节点 ID保证多次测试运行的一致性 node.idffffffff-ffff-ffff-ffff-ffffffffffff node.environmenttest # Web 界面以及集群内部 HTTP 通信监听的端口 http-server.http.port8080 # 该节点作为 coordinator 运行 coordinatortrue # 启用服务发现并指定 Discovery 服务地址 discovery-server.enabledtrue discovery.urihttp://localhost:8080当http-server.http.port8080时直接使用浏览器访问http://coordinator-host:8080本机开发则为http://localhost:8080即可打开 Web 界面主页面。需要注意该示例配置仅用于开发环境文件头部有明确警告生产环境应参照官方文档另行配置但http-server.http.port这一端口参数是 Web 界面可达性的核心开关。主页面查询列表与核心字段Web 界面的主页面展示当前集群的查询列表每一条记录包含以下关键信息Query ID查询 ID全局唯一的查询标识点击可进入查询详情页Query text查询文本提交的 SQL 语句内容Query state查询状态查询当前所处生命周期阶段详见下文状态详解Percentage completed完成百分比查询整体进度Username用户名提交该查询的用户Source来源查询发起方标识例如客户端应用名称或脚本标识。页面布局遵循运行优先、最近优先的排序规则当前正在运行的查询排在列表最顶部其后是最新完成或失败的查询。这一排序逻辑在前端取数所依赖的服务端端点中可以直接看到——QueryResource.java 中的QUERIES_ORDERING比较器定义了严格的优先级顺序RUNNING运行中状态查询QUEUED排队中状态查询其余尚未结束的查询isDone()为 falseFAILED失败查询其余已结束查询如FINISHED。在相同优先级内再按查询创建时间倒序最新的在前这正是主页运行中置顶、失败次之、完成垫底、新查询靠前排序效果的实现依据。从源码结构看该端点还支持state与limit两个查询参数分别用于按状态过滤与限制返回条数与前端列表页配合使用。查询状态详解从 QUEUED 到 FAILED官方文档列出了 Web 界面中可见的八种查询状态仓库中的枚举定义 QueryState.java 与之一一对应状态含义是否终态QUEUED查询已被接受正在等待执行否PLANNING查询正在进行计划生成否STARTING查询执行正在启动否RUNNING查询至少有一个正在运行的任务task否BLOCKED查询被阻塞正在等待资源缓冲区空间、内存或 split否FINISHING查询正在收尾例如 autocommit 查询的提交阶段否FINISHED查询执行完毕且所有输出已被消费是FAILED查询执行失败是从源码来看枚举内部还维护了doneState标记FINISHED与FAILED是仅有的两个终态isDone()返回 true其余状态均为非终态。也就是说一个查询一旦进入FINISHED或FAILED其状态不会再发生迁移。此外从源码结构可以看到上述八个状态是QueryState枚举对外暴露的完整状态集之外的精简视图枚举中还存在WAITING_FOR_PREREQUISITES等待前置条件、WAITING_FOR_RESOURCES等待所需资源beta 特性与DISPATCHING正在分发到 coordinator等内部状态。这些状态通常短暂存在或属于特定运行模式Web 界面主列表主要呈现文档列出的八种可观测状态。BLOCKED 状态正常现象还是故障信号文档特别强调BLOCKED状态本身是正常的——查询在执行过程中必然会有等待资源的时刻例如等待上游 stage 产出数据、等待 worker 空闲等。但如果BLOCKED持续存在则应视为异常信号并主动排查。官方文档列出的常见诱因包括内存不足或 split 不足内存配额打满或数据分片split分配不够任务无法推进磁盘或网络 I/O 瓶颈worker 的本地 I/O 成为吞吐瓶颈数据倾斜data skew数据集中在少数几个 worker 上其余 worker 空闲等待并行度不足可用 worker 数量太少无法充分利用集群资源下游 stage 计算密集某一 stage 的计算开销过大拖慢其后依赖它的 stage客户端消费缓慢典型场景是执行SELECT *这类全量查询时客户端没有及时读取结果集导致服务端输出缓冲区占满、查询被迫阻塞等待。排查思路进入该查询的详情页结合任务task列表定位被阻塞的具体 stage 与 task再对照上述诱因逐一排除——例如检查内存配置、观察 worker 节点的资源水位、分析各 stage 的数据量是否均匀必要时结合下方介绍的 JSON 统计文档做进一步量化分析。查询详情页Summary、Stage 图形与 Task 列表在主页面点击任意Query ID 链接即可进入该查询的详情页。详情页由三大部分组成Summary摘要区展示查询的总体信息与统计包括当前状态、用户、执行时间等核心指标摘要区同时提供两个可视化视图——task execution任务执行视图与timeline时间线视图用于直观观察各阶段任务的执行时序与耗时分布Stage 图形化表示将查询计划中的各个 stage 以图形方式呈现帮助快速理解 stage 之间的上下游依赖关系Task 列表列出该查询在各 worker 上产生的全部任务每个 Task ID 同样可以点击进入更细粒度的任务信息页查看该任务的输入输出、耗时、内存占用等执行细节。从仓库前端源码看详情页通过多个标签页组织内容query.htmlOverview 总览、plan.htmlLive Plan 实时计划、stage.htmlStage Performance 各阶段性能、timeline.htmlSplits 分片信息见 QueryHeader.jsx。其中Stage Performance页面即对应文档所述的 stage 图形化与 task 明细Splits 页面则展示分片split级别的调度与执行时间线。这些视图与分析手段共同用于回答一个核心问题查询的时间到底花在了哪里。终止运行中的查询Kill 按钮Summary 区提供了kill终止按钮用于强制终止当前正在运行的查询。前端点击后实际向服务端发送的是PUT /v1/query/{queryId}/killed请求见 QueryHeader.jsx。此外界面上还提供Preempt抢占按钮对应PUT /v1/query/{queryId}/preempted端点。从服务端实现看QueryResource.java 提供了完整的查询生命周期管理接口DELETE /v1/query/{queryId}取消cancel查询PUT /v1/query/{queryId}/killed终止kill查询PUT /v1/query/{queryId}/preempted抢占preempt查询DELETE /v1/query/stage/{stageId}取消单个 stage 的执行。failQuery方法在真正终止前会先检查查询状态如果查询已经处于终态则返回409 Conflict终止后还会校验错误码是否生效以应对并发竞态保证操作结果可靠。完整统计文档JSON 链接详情页右上角的JSON 链接前端实现为跳转/v1/query/{queryId}?pretty见 QueryHeader.jsx返回该查询的完整 JSON 统计文档。这份文档由GET /v1/query/{queryId}端点生成包含QueryInfo级别的全部信息与统计——从查询状态、SQL 文本、用户、资源组到每个 stage 的算子统计、每个 task 的调度与执行明细。对于需要精确分析查询性能的场景这份 JSON 是比界面图表更完整的第一手数据源可以将其保存后离线分析或结合 QueryViewer.jsx 这类工具该组件支持直接读取本地导出的查询 JSON 文件并重新渲染进行回放与对比。Web 界面背后的 REST API 支撑Web 界面的所有数据均来自 coordinator 暴露的一组 REST 端点核心入口即 QueryResource.java 定义的/v1/query资源其主要端点汇总如下方法与路径作用GET /v1/query返回查询列表支持state过滤、limit限制条数GET /v1/query/{queryId}返回单个查询的完整QueryInfo统计文档DELETE /v1/query/{queryId}取消查询PUT /v1/query/{queryId}/killed终止查询对应 UI 的 Kill 按钮PUT /v1/query/{queryId}/preempted抢占查询对应 UI 的 Preempt 按钮DELETE /v1/query/stage/{stageId}取消指定 stage这些端点与前端页面一一对应QueryList.jsx拉取查询列表渲染主页QueryDetail.jsx、StageDetail.jsx分别渲染查询详情与 stage/task 明细。理解这条UI → REST API → 查询管理器DispatchManager/QueryManager的调用链可以帮助你在排查问题时直接通过 curl 等工具访问这些端点来验证界面所见数据的真实性。小结与运维建议Presto Web 界面是日常监控查询、定位性能瓶颈与干预异常查询的核心工具。基于官方文档与仓库源码总结以下实践要点访问入口coordinator 的http-server.http.port即 Web 界面端口默认示例为 8080列表页快速定位运行中的查询固定置顶结合完成百分比与状态列可迅速发现异常查询状态语义牢记FINISHED/FAILED是终态BLOCKED短暂出现属正常持续BLOCKED则需按内存、I/O、数据倾斜、并行度与客户端消费速度五个方向排查详情页深挖通过 stage 图形、task 列表与 task execution/timeline 两种可视化定位时间消耗点需要精确数据时通过 JSON 链接导出完整统计文档进行离线分析干预手段发现失控查询时可在 Summary 区使用 Kill或 Preempt按钮立即终止其背后是对/v1/queryREST 端点中 killed/preempted 接口的调用也可直接通过 API 操作便于纳入自动化运维流程。【免费下载链接】prestoThe official home of the Presto distributed SQL query engine for big data项目地址: https://gitcode.com/gh_mirrors/pre/presto创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表