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
是由此參數定義,而 schema
和 function_name
則是從輸入 JSON 檔案讀取。
如果為空,則函數會註冊為 schema.function_name
。
remote-function-server.serde
¶
類型:
字串
預設值:
"presto_page"
與遠端函數伺服器通訊時要使用的序列化/還原序列化方法。支援的值為 presto_page
或 spark_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.address
和 remote-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-cleanup
為 true
時適用。舊任務定義為至少 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
僅限原生執行。在原生引擎上啟用寫入器溢寫。