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
¶
类型:
string
默认值:
""
本地文件系统路径,其中包含包含远程函数签名的 JSON 文件。如果不为空,Presto 本地 worker 将递归搜索、打开、解析并从这些 JSON 文件中注册函数定义。
remote-function-server.catalog-name
¶
类型:
string
默认值:
""
要作为前缀添加到 Velox 中注册的函数名的目录名称。注册的函数名称模式为 catalog.schema.function_name
,其中 catalog
由此参数定义,而 schema
和 function_name
从输入 JSON 文件中读取。
如果为空,则函数将注册为 schema.function_name
。
remote-function-server.serde
¶
类型:
string
默认值:
"presto_page"
与远程函数服务器通信时要使用的序列化/反序列化方法。支持的值为 presto_page
或 spark_unsafe_row
。
remote-function-server.thrift.address
¶
类型:
string
默认值:
""
托管远程函数服务器的位置(IP 地址或主机名),如果使用 remote-function-server.signature.files.directory.path
注册了任何远程函数。如果未指定,则回退到环回接口 (::1
)
remote-function-server.thrift.port
¶
类型:
integer
默认值:
0
托管远程函数服务器的端口。如果未指定,并且正在尝试注册远程函数,则会引发异常。
remote-function-server.thrift.uds-path
¶
类型:
string
默认值:
""
与本地远程函数服务器通信的 UDS(Unix 域套接字)路径。如果指定,则优先于 remote-function-server.thrift.address
和 remote-function-server.thrift.port
。
JWT 身份验证支持¶
基于 C++ 的 Presto 支持 JWT 身份验证,用于内部通信。有关通常支持的参数的详细信息,请访问 JWT。
还有一个额外的参数
internal-communication.jwt.expiration-seconds
¶
类型
integer
默认值:
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
¶
类型
integer
默认值:
0
启用异步数据缓存时 SSD 缓存的大小。
enable-old-task-cleanup
¶
类型
bool
默认值:
true
Presto on Spark 默认值:
false
启用定期清理旧任务。对于 Presto C++,默认值为 true
。对于 Presto on Spark,此属性默认为 false
,因为僵尸或卡住的任务由 Spark 通过推测性执行处理。
old-task-cleanup-ms
¶
类型
integer
默认值:
60000
定义任务过时并符合清理条件的时间间隔。仅在 enable-old-task-cleanup
为 true
时适用。过时任务是指至少 old-task-cleanup-ms
时间内未收到心跳,或未运行且结束时间早于 old-task-cleanup-ms
的 PrestoTask。
Worker 指标收集¶
用户可以通过设置属性来启用 Worker 级别的指标收集
runtime-metrics-collection-enabled
¶
类型:
boolean
默认值:
false
设置为 true 时,默认行为是无操作。在启用此标志之前,必须进行先前的设置。要以 Prometheus 数据格式启用指标收集,请参考 此处。
会话属性¶
以下是基于 C++ 的 Presto 的原生会话属性。
driver_cpu_time_slice_limit_ms
¶
类型:
integer
默认值:
1000
仅限原生执行。定义驱动线程在必须让位于其他线程之前允许运行的最大 CPU 时间(毫秒),以实现跨多个线程的公平 CPU 使用率。
正值强制执行此限制,确保线程不会独占 CPU 资源。
负值被视为无效,并被视为请求使用系统默认设置,在本例中为 1000
毫秒。
注意:将属性设置为 0
允许线程无限期运行而不会让步,这在共享环境中不建议这样做,因为它会导致资源争用。
legacy_timestamp
¶
类型:
boolean
默认值:
true
仅限原生执行。使用旧版 TIME 和 TIMESTAMP 语义。
native_aggregation_spill_memory_threshold
¶
类型:
integer
默认值:
0
仅限原生执行。指定最终聚合操作在开始溢出到磁盘之前可以使用的最大内存(字节)。如果设置为 0
,则没有限制,允许聚合使用无限内存资源,这可能会影响系统性能。
native_debug_validate_output_from_operators
¶
类型:
boolean
默认值:
false
如果设置为 true
,则在任务执行期间,将验证每个运算符的输出向量的一致性。它可以帮助识别格式错误的向量导致故障或崩溃的问题,从而促进对运算符输出问题的调试。
注意:这是一个昂贵的检查,仅应用于调试目的。
native_join_spill_enabled
¶
类型:
boolean
默认值:
true
仅限原生执行。在原生引擎上启用连接溢出。
native_join_spill_memory_threshold
¶
类型:
integer
默认值:
0
仅限原生执行。指定散列连接操作在开始溢出到磁盘之前可以使用的最大内存(字节)。值为 0
表示没有限制,允许连接操作使用无限内存资源,这可能会影响整体系统性能。
native_join_spiller_partition_bits
¶
类型:
integer
默认值:
2
仅限原生执行。指定用于计算散列连接和 RowNumber 操作的溢出分区号的位数 (N)。分区号由 2
乘以 N 次方确定,定义了在溢出过程中数据如何被分区。
native_max_spill_file_size
¶
类型:
integer
默认值:
0
指定允许的最大溢出文件大小(字节)。如果设置为 0
,则没有溢出文件大小限制,允许溢出文件根据可用磁盘空间大小无限增长。使用 native_max_spill_file_size
来管理需要溢出到磁盘的操作期间的磁盘空间使用情况。
native_max_spill_level
¶
类型:
integer
默认值:
4
仅限原生执行。散列连接构建允许的最大溢出级别。 0
是初始溢出级别,-1
表示无限。
native_order_by_spill_memory_threshold
¶
类型:
integer
默认值:
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
仅限原生执行。在原生引擎上启用写入器溢出。