天天看點

【大資料】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 節點優雅退出

官方文檔:https://trino.io/docs/current/admin/graceful-shutdown.html

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 與執行計劃介紹就先到這裡了,有任何疑問歡迎私信或留言,也可關注我【大資料與雲原生技術分享】加群或私信咨詢問題~

繼續閱讀