Presto C++ 功能

端點

與任務相關的 HTTP 端點會在 TaskResource.cpp 中註冊到 Proxygen。實作的重要端點包括

  • POST: v1/task:此操作會處理 TaskUpdateRequest

  • GET: v1/task:此操作會傳回序列化的 TaskInfo (用於全面的指標,回報頻率可能較低)

  • GET: v1/task/status:此操作會傳回序列化的 TaskStatus (用於查詢進度追蹤,必須頻繁回報)

其他 HTTP 端點包括

  • POST: v1/memory:回報記憶體,但不會像 Java worker 一樣調整指派

  • GET: v1/info/metrics:以 Prometheus 資料格式傳回 worker 層級的指標。如需更多資訊,請參閱 Worker 指標收集 一節。以下是此 API 傳回的範例指標資料。

    # TYPE presto_cpp_num_http_request counter
    presto_cpp_num_http_request{cluster="testing",worker=""} 0
    # TYPE presto_cpp_num_http_request_error counter
    presto_cpp_num_http_request_error{cluster="testing",worker=""} 0
    # TYPE presto_cpp_memory_pushback_count counter
    presto_cpp_memory_pushback_count{cluster="testing",worker=""} 0
    # TYPE velox_driver_yield_count counter
    velox_driver_yield_count{cluster="testing",worker=""} 0
    # TYPE velox_cache_shrink_count counter
    velox_cache_shrink_count{cluster="testing",worker=""} 0
    # TYPE velox_memory_cache_num_stale_entries counter
    velox_memory_cache_num_stale_entries{cluster="testing",worker=""} 0
    # TYPE velox_arbitrator_requests_count counter
    velox_arbitrator_requests_count{cluster="testing",worker=""} 0
    
  • GET: v1/info:傳回有關 worker 的基本資訊。以下為範例

    {"coordinator":false,"environment":"testing","nodeVersion":{"version":"testversion"},"starting":false,"uptime":"49.00s"}
    
  • GET: v1/status:傳回記憶體集區資訊。

Presto C++ 的請求/回應流程與 Java worker 相同。任務或新分割會透過 TaskUpdateRequest 註冊。資源利用率和查詢進度會透過任務端點傳送至協調器。

遠端函數執行

Presto C++ 支援遠端執行純量函數。當函數程式碼不是以 C++ 撰寫,或出於安全性或彈性的原因,函數程式碼無法連結到與主要引擎相同的可執行檔時,此功能非常有用。

遠端函數簽章需要使用 JSON 檔案提供,遵循 JsonFileBasedFunctionNamespaceManager 實作的格式。以下屬性可設定遠端函數執行

remote-function-server.signature.files.directory.path

  • 類型: 字串

  • 預設值: ""

包含遠端函數簽章的 JSON 檔案所在的本機檔案系統路徑。如果不是空的,Presto 原生 worker 會以遞迴方式搜尋、開啟、剖析和註冊來自這些 JSON 檔案的函數定義。

remote-function-server.catalog-name

  • 類型: 字串

  • 預設值: ""

要新增為 Velox 中已註冊函數名稱字首的目錄名稱。已註冊的函數名稱模式為 catalog.schema.function_name,其中 catalog 是由此參數定義,而 schemafunction_name 則是從輸入 JSON 檔案讀取。

如果為空,則函數會註冊為 schema.function_name

remote-function-server.serde

  • 類型: 字串

  • 預設值: "presto_page"

與遠端函數伺服器通訊時要使用的序列化/還原序列化方法。支援的值為 presto_pagespark_unsafe_row

remote-function-server.thrift.address

  • 類型: 字串

  • 預設值: ""

託管遠端函數伺服器的位置 (IP 位址或主機名稱),如果已使用 remote-function-server.signature.files.directory.path 註冊任何遠端函數。如果未指定,則會回復為環回介面 (::1)

remote-function-server.thrift.port

  • 類型: 整數

  • 預設值: 0

託管遠端函數伺服器的連接埠。如果未指定,而且嘗試註冊遠端函數,則會擲回例外狀況。

remote-function-server.thrift.uds-path

  • 類型: 字串

  • 預設值: ""

用於與本機遠端函數伺服器通訊的 UDS (Unix 網域通訊端) 路徑。如果指定,優先順序高於 remote-function-server.thrift.addressremote-function-server.thrift.port

JWT 身份驗證支援

以 C++ 為基礎的 Presto 支援內部通訊的 JWT 身份驗證。如需一般支援參數的詳細資訊,請瀏覽 JWT

還有一個額外的參數

internal-communication.jwt.expiration-seconds

  • 類型 整數

  • 預設值: 300

在用戶端上建立 JWT 與伺服器驗證之間存在一個時間週期。如果時間週期小於或等於參數值,則請求有效。如果時間週期超過參數值,則會因身份驗證失敗 (HTTP 401) 而拒絕請求。

非同步資料快取與預先提取

connector.num-io-threads-hw-multiplier

  • 類型 double

  • 預設值: 1.0

  • Presto on Spark 預設值: 0.0

連接器用來執行預先載入/預先提取的 IO 執行緒大小。如果 connector.num-io-threads-hw-multiplier 設定為零,則停用預先提取。

async-data-cache-enabled

  • 類型 bool

  • 預設值: true

  • Presto on Spark 預設值: false

是否啟用非同步資料快取。

async-cache-ssd-gb

  • 類型 整數

  • 預設值: 0

啟用非同步資料快取時,SSD 快取的大小。

enable-old-task-cleanup

  • 類型 bool

  • 預設值: true

  • Presto on Spark 預設值: false

啟用定期清除舊任務。對於 Presto C++,預設值為 true。對於 Presto on Spark,此屬性預設為 false,因為殭屍或停滯的任務由 Spark 的推測執行處理。

old-task-cleanup-ms

  • 類型 整數

  • 預設值: 60000

任務被視為舊任務並符合清除資格的時間長度。僅在 enable-old-task-cleanuptrue 時適用。舊任務定義為至少 old-task-cleanup-ms 沒有收到心跳的 PrestoTask,或者是不在執行中且結束時間超過 old-task-cleanup-ms 前的任務。

工作節點指標收集

使用者可以透過設定屬性來啟用工作節點層級指標的收集

runtime-metrics-collection-enabled

  • 類型: boolean

  • 預設值: false

    當為 true 時,預設行為是不執行任何操作。在啟用此旗標之前,必須先完成先前的設定。若要啟用 Prometheus 資料格式的指標收集,請參閱此處

工作階段屬性

以下是基於 C++ 的 Presto 的原生工作階段屬性。

driver_cpu_time_slice_limit_ms

  • 類型: 整數

  • 預設值: 1000

僅限原生執行。定義驅動程式執行緒在必須讓給其他執行緒之前,允許執行的最大 CPU 時間(毫秒),以便在多個執行緒之間實現公平的 CPU 使用率。

正值會強制執行此限制,確保執行緒不會壟斷 CPU 資源。

負值被視為無效,並被視為使用系統預設設定的要求,在本例中為 1000 毫秒。

注意:將屬性設定為 0 允許執行緒無限期執行而不讓出,這在共享環境中不建議,因為可能會導致資源爭用。

legacy_timestamp

  • 類型: boolean

  • 預設值: true

僅限原生執行。使用傳統的 TIME 和 TIMESTAMP 語意。

native_aggregation_spill_memory_threshold

  • 類型: 整數

  • 預設值: 0

僅限原生執行。指定最終彙總操作在開始溢寫到磁碟之前可以使用的最大記憶體(以位元組為單位)。如果設定為 0,則沒有限制,允許彙總消耗無限的記憶體資源,這可能會影響系統效能。

native_debug_validate_output_from_operators

  • 類型: boolean

  • 預設值: false

如果設定為 true,則在執行任務期間,會驗證每個運算子的輸出向量是否一致。它可以幫助識別格式錯誤的向量導致故障或崩潰的問題,從而有助於偵錯運算子輸出問題。

注意:這是一個昂貴的檢查,僅應用於偵錯用途。

native_join_spill_enabled

  • 類型: boolean

  • 預設值: true

僅限原生執行。在原生引擎上啟用聯結溢寫。

native_join_spill_memory_threshold

  • 類型: 整數

  • 預設值: 0

僅限原生執行。指定雜湊聯結操作在開始溢寫到磁碟之前可以使用的最大記憶體(以位元組為單位)。值為 0 表示沒有限制,允許聯結操作使用無限的記憶體資源,這可能會影響整體系統效能。

native_join_spiller_partition_bits

  • 類型: 整數

  • 預設值: 2

僅限原生執行。指定用於計算雜湊聯結和 RowNumber 操作的溢寫分割區數的位元數 (N)。分割區數確定為 2 的 N 次方,定義在溢寫過程中如何分割資料。

native_max_spill_file_size

  • 類型: 整數

  • 預設值: 0

指定允許的最大溢寫檔案大小(以位元組為單位)。如果設定為 0,則對溢寫檔案大小沒有限制,允許溢寫檔案根據可用的磁碟空間盡可能增大。使用 native_max_spill_file_size 來管理需要溢寫到磁碟的操作期間的磁碟空間使用率。

native_max_spill_level

  • 類型: 整數

  • 預設值: 4

僅限原生執行。雜湊聯結建置允許的最大溢寫層級。0 是初始溢寫層級,-1 表示無限制。

native_order_by_spill_memory_threshold

  • 類型: 整數

  • 預設值: 0

僅限原生執行。指定 ORDER BY 操作在開始將資料溢寫到磁碟之前可以使用的最大記憶體(以位元組為單位)。如果設定為 0,則對記憶體使用率沒有限制,可能會導致排序操作的大量記憶體配置。使用此臨界值可以更有效率地管理 ORDER BY 操作期間的記憶體使用率。

native_row_number_spill_enabled

  • 類型: boolean

  • 預設值: true

僅限原生執行。在原生引擎上啟用列號溢寫。

native_simplified_expression_evaluation_enabled

  • 類型: boolean

  • 預設值: false

僅限原生執行。在運算式評估中啟用簡化路徑。

native_spill_compression_codec

  • 類型: varchar

  • 預設值: none

僅限原生執行。指定用於壓縮溢寫資料的壓縮 CODEC。支援的壓縮 CODEC 為:ZLIB、SNAPPY、LZO、ZSTD、LZ4 和 GZIP。將此屬性設定為 none 會停用壓縮。

native_spill_file_create_config

  • 類型: varchar

  • 預設值: ""

僅限原生執行。指定用於建立溢寫檔案的組態參數。這些參數提供給底層檔案系統,允許根據環境需求自訂溢寫檔案建立。這些參數的格式和選項由底層檔案系統的功能決定,可能包括檔案位置、大小限制和檔案系統特定的最佳化設定。

native_spill_write_buffer_size

  • 類型: bigint

  • 預設值: 1048576

僅限原生執行。將序列化的溢寫資料緩衝到磁碟以提高 IO 效率的最大大小(以位元組為單位)。如果設定為 0,則停用緩衝。

native_topn_row_number_spill_enabled

  • 類型: boolean

  • 預設值: true

僅限原生執行。在原生引擎上啟用 topN 列號溢寫。

native_window_spill_enabled

  • 類型: boolean

  • 預設值: true

僅限原生執行。在原生引擎上啟用視窗溢寫。

native_writer_spill_enabled

  • 類型: boolean

  • 預設值: true

僅限原生執行。在原生引擎上啟用寫入器溢寫。