【大数据】Presto(Trino)REST API 与执行计划介绍

一、概述

Presto(现在叫Trino)是一个分布式SQL查询引擎,它答应用户在多个数据源上履行查询。Presto本身是一个独立的Java程序,能够经过REST API与其他应用程序进行通讯。

Presto的REST API是一组HTTP接口,能够用于与Presto服务器进行通讯,并提交查询恳求、获取查询成果等。以下是Presto REST API的一些常见用途:

  • 履行SQL查询:运用REST API,能够提交SQL查询恳求,并从Presto服务器获取查询成果。

  • 获取查询进展:运用REST API,能够获取当前查询的进展和状况,例如查询已经履行的百分比、估计完结时刻等。

  • 查询元数据:运用REST API,能够获取Presto服务器上的表和列的元数据信息,例如表的称号、列的数据类型等。

  • 办理Presto集群:运用REST API,能够办理Presto集群中的节点,例如添加或删除节点,重新启动节点等。

  • 获取集群状况:运用REST API,能够获取Presto集群的状况、版本号等信息。

Presto REST API运用JSON格式进行数据交互,并供给了许多API端点以满足不同的需求。除此之外,Presto REST API还供给了一些安全操控和权限办理功用,例如对拜访API的用户进行身份验证、操控用户的操作权限等。

总归,Presto REST API供给了一种简单、快速、可靠地与Presto进行通讯的方法,为Presto的用户供给了更多自由、灵敏的操作空间。

【大数据】Presto(Trino)REST API 与执行计划介绍

二、环境准备

如已经有环境了,能够疏忽,如想快熟布置Presto(Trino)环境可参看我这篇文章:【大数据】经过 docker-compose 快速布置 Presto(Trino)保姆级教程

docker exec -it trino-coordinator bash
# --catalog:数据源 --schema:数据库
${TRINO_HOME}/bin/trino-cli --server http://trino-coordinator:8080 --user=hadoop

三、常用 REST API

以下是一些常见的Presto REST API端点和用途:

  • /v1/catalog:从Presto服务器获取一切数据源的元数据信息,例如数据源称号、表名、列名、数据类型等。

  • /v1/query:提交一个SQL查询恳求,Presto服务器会立即回来一个查询ID,并在后台履行查询。运用这个ID,能够获取查询的状况和成果。

  • /v1/query/{queryId}/status:获取查询的状况信息,例如查询是否已经完结、已经履行的百分比等。

  • /v1/query/{queryId}/results:获取查询的成果,以JSON格式回来。这个端点能够屡次调用,以获取查询的不同成果部分。

  • /v1/query/{queryId}/cancel:撤销正在履行的查询恳求。

  • /v1/cluster:获取Presto集群的一切节点信息,包括节点IP地址、端口号、作业状况等。

  • /v1/info:获取Presto服务器的版本号、构建时刻、运行时信息等。

  • /v1/stats:获取Presto服务器的运用统计信息,例如查询履行次数、查询呼应时刻、查询失败次数等。

经过运用这些REST API端点,能够方便地与Presto服务器进行交互,并对Presto进行操控和办理。同时,Presto REST API还供给了若干参数选项和高档功用,能够让用户对Presto服务器的行为进行更加精密的操控和优化。

1)worker 节点高雅退出

官方文档:trino.io/docs/curren…

Trino 有一个高雅的封闭 API,能够专门用于 以确保它们在不影响正在运行的查询的情况下终止,给定 满足的宽限期。

# 睡眠 shutdown.grace-period,默认为 2 分钟。如有使命直到一切活动使命完结。
# 封闭应用程序。
curl -v -X PUT -d '"SHUTTING_DOWN"' -H "Content-type: application/json" \
    http://worker:8080/v1/info/state
# 示例:
curl -v -X PUT -d '"SHUTTING_DOWN"' -H "Content-type: application/json" \
    http://docker-compose-presto-trino-worker-2:8080/v1/info/state

2)提交SQL查询恳求

curl --request POST \
--url http://presto-server:8080/v1/query \
--header 'content-type: application/json' \
--data '{
    "query": "SELECT COUNT(*) FROM schema.table",
    "timezone": "Asia/Shanghai"
}'

此指令向Presto服务器提交一个SQL查询恳求,查询的SQL句子是"SELECT COUNT(*) FROM schema.table",时区设置为"Asia/Shanghai"。履行成功后,Presto服务器会立即回来一个查询ID

3)获取查询状况

curl http://presto-server:8080/v1/query/query-id/status

这个指令运用查询ID查询查询的状况信息,”query-id”是需要替换为详细的查询ID。

4)获取查询成果

curl http://presto-server:8080/v1/query/query-id/results/1

这个指令运用查询ID获取查询成果,”1″表示成果是从第一条开端获取的。履行成功后,Presto服务器会以JSON格式回来查询成果。

5)撤销查询恳求

curl --request DELETE http://presto-server:8080/v1/query/query-id

这个指令会撤销查询ID对应的查询恳求,而且终止查询履行。

6)获取Presto 节点信息

curl http://presto-server:8080/v1/node

为检索集群中可用Trino节点的列表供给支持。

7)获取Presto服务器运用统计信息

curl http://presto-server:8080/v1/status

这个指令回来Presto服务器的运用统计信息,例如查询履行次数、查询呼应时刻、查询失败次数等。

8)获取查询方案

curl http://presto-server:8080/v1/query/query-id/plan

这个指令回来查询ID对应的查询方案,包括查询方案中运用的数据源、过滤器、衔接方法等信息。

这儿仅仅列举出部分的api,想了解更多,可参看官方文档。

四、Presto(Trino)履行方案

Presto(Trino)履行方案的生成基于Presto(Trino)的分布式查询引擎。Presto(Trino)将一个查询分化成多个使命,并在多个节点上并行履行这些使命。履行方案记载每个使命的履行方法,以及每个使命中运用的算子和资源。

以下是Presto(Trino)履行方案的根本生成原理:

  1. 解析:Presto(Trino)将查询句子解析成一棵语法树。这个语法树包含了查询的各个组成部分,如挑选器、联合条件、过滤条件等等。

  2. 逻辑优化:Presto(Trino)对语法树进行逻辑优化。例如,它能够经过重组联合条件来改善查询功能,或许消除不必要的过滤器。

  3. 物理优化:Presto(Trino)将逻辑方案转换为物理方案。这个过程中,Presto(Trino)挑选合适的算子和衔接方法,以在整个集群中同享计算负载。

  4. 使命划分:Presto(Trino)将物理方案分化成多个小使命,并在节点上并行履行这些使命。每个使命都包含一个或多个算子,并指定运用哪些资源和节点。

  5. **履行方案:**Presto(Trino)生成履行方案,描绘一切使命的履行方法以及每个使命中运用的算子和资源。这个履行方案能够在查询期间进行动态更新,而且会根据查询的进展和节点负载进行调整。

【大数据】Presto(Trino)REST API 与执行计划介绍
总归,Presto(Trino)履行方案的生成基于一系列逻辑和物理优化,以及使命分化和分布式履行等技能。经过运用履行方案,您能够更好地了解查询的履行方法和功能瓶颈,从而对查询进行优化。


Presto(Trino)REST API 与履行方案介绍就先到这儿了,有任何疑问欢迎私信或留言,也可重视我【大数据与云原生技能分享】加群或私信咨询问题~

【大数据】Presto(Trino)REST API 与执行计划介绍