ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Presto 0.295 版本发布详解:Java 17 强制升级、SQL 调用函数插件化与集群级新特性

Presto 0.295 版本发布详解:Java 17 强制升级、SQL 调用函数插件化与集群级新特性 Presto 0.295 版本发布详解Java 17 强制升级、SQL 调用函数插件化与集群级新特性【免费下载链接】prestoThe official home of the Presto distributed SQL query engine for big data项目地址: https://gitcode.com/gh_mirrors/pre/presto导读Presto 0.295 是 Presto 分布式 SQL 查询引擎的一次里程碑式版本发布它正式将运行环境升级为 Java 17并首次将全部内联 SQL 调用函数SQL-invoked functions迁移到独立插件中同时带来了跨集群查询重试、OAuth2 客户端认证、HTTP/2 通信、原生执行空间连接spatial join等一批面向生产环境的重大能力。本文以官方 Release 0.295 说明为主体结合当前仓库的源码与配置实现逐一拆解破坏性变更、核心亮点、通用改动、Prestissimo 原生执行改动、安全修复、各连接器更新与 SPI 演进帮助你在升级前完整评估影响面并规划迁移路径。版本概览这是必读的升级版本0.295 是本仓库 presto-docs/src/main/sphinx/release/release-0.295.rst 记录的官方版本。与常规的增量版本不同本次发布包含两项需要所有部署方提前规划的破坏性变更Breaking Changes以及多项能够显著改善集群稳定性、安全性与可观测性的新特性。Breaking Changes升级前必须了解的两件事1. 运行时强制升级为 Java 170.295 起Presto 要求使用 Java 17 虚拟机同时运行 coordinator 与 worker。需要特别注意的是Presto 服务端Servercoordinator 和 worker 都必须运行在 Java 17 VM 上不再兼容 Java 8/11Presto 客户端Client与 Presto-on-Spark保持 Java 8 兼容不受服务端升级影响。这意味着你在升级 0.295 之前需要先验证所有部署节点的 JVM 版本。对应改动来自 PR #24866。对于使用docker/目录下官方镜像构建的用户也需要同步更新基础镜像中的 JDK 版本。2. 全部内联 SQL 调用函数迁移至独立插件0.295 将原先内联在各模块中的 SQL 调用函数全部集中到新插件presto-sql-invoked-functions-plugin中。被迁移的函数清单如下共 26 个字符串类replace_first、trail采样类key_sampling_percent匹配类no_values_match、no_keys_match、any_values_match、any_keys_match、all_keys_matchMap 类map_remove_null_values、map_top_n_values、map_top_n_keys、map_top_n、map_key_exists、map_keys_by_top_n_values、map_normalize数组类array_top_n、remove_nulls、array_sort_desc、array_min_by、array_max_by、array_least_frequent、array_has_duplicates、array_duplicates、array_frequency、array_split_into_chunks、array_average、array_intersect仓库中新增的 presto-sql-helpers/README.md 详细说明了这一目录的定位presto-sql-helpers本身不是库而是包含两个插件模块分别服务于不同的集群形态集群类型需要加载的插件Java 集群presto-sql-invoked-functions-plugin原生执行集群无 sidecarpresto-sql-invoked-functions-plugin原生执行集群启用 sidecarpresto-native-sql-invoked-functions-plugin函数加载规则非常严格每个集群必须且只能加载一个 SQL 调用函数插件。如果同时加载两个插件或加载了错误的插件Presto 将因函数签名冲突而无法启动。因此升级时务必核对集群形态与插件配置的对应关系。从源码实现看presto-sql-invoked-functions-plugin模块中的 SqlInvokedFunctionsPlugin.java 通过实现 SPI 中的getSqlInvokedFunctions()方法将ArraySqlFunctions、MapNormalizeFunction、MapSqlFunctions、SimpleSamplingPercent、StringSqlFunctions、ArrayIntersectFunction六个函数类注册进引擎而presto-native-sql-invoked-functions-plugin模块则提供面向 sidecar 原生集群的NativeSqlInvokedFunctionsPlugin对应 NativeArraySqlFunctions.java 等实现。Highlights0.295 的七大核心亮点1. WebUI 与 JDBC 客户端的 OAuth2 支持0.295 为 Presto WebUI 和 JDBC Presto Client 增加了 OAuth2 认证支持PR #24443。这使基于 Web 的查询界面和 JDBC 驱动的接入都可以使用标准的 OAuth2 授权流程取代或补充传统的密码/Token 认证方式适合对接企业内部已有的身份提供方IdP。2. 新增query.max-queued-time控制查询排队时间的上限这是本版本对查询生命周期管理的重要增强PR #25589。通过配置属性query.max-queued-time可以指定查询在队列中被允许等待的最长时间超过该时间即被终止kill。该配置可以被会话属性query_max_queued_time覆盖。从源码验证配置项定义在 QueryManagerConfig.java 中字段queryMaxQueuedTime的默认值为Duration(100, TimeUnit.DAYS)即默认情况下几乎不限制排队时间Config(query.max-queued-time)注解声明了配置文件中的键名。会话属性在 SystemSessionProperties.java 中以QUERY_MAX_QUEUED_TIME query_max_queued_time定义其默认值直接取自queryManagerConfig.getQueryMaxQueuedTime()见 SystemSessionProperties.java且为Duration类型可通过Duration.valueOf()解析字符串。也就是说你既可以在config.properties中全局设置query.max-queued-time10m也可以针对单个会话动态调整SET SESSION query_max_queued_time 5m;这为高并发集群中排队查询迟迟得不到调度的问题提供了自动化的熔断手段配合已有的query.max-queued-queries默认 5000见 QueryManagerConfig.java可以更精细地控制队列行为。3. 原生执行Prestissimo支持空间连接Spatial Join0.295 为原生执行引擎Presto C / Velox 实现增加了空间连接支持PR #25823。此前空间连接仅存在于 Java 引擎本次补齐后ST_*空间谓词驱动的连接查询可以在原生执行环境中高效运行。4. Arrow Flight 连接器支持双向 TLSmTLS认证Arrow Flight 连接器新增了 mTLS 支持PR #25388要求客户端与服务器互相验证身份显著增强数据传输安全。配置层面涉及四个关键属性定义于 ArrowFlightConfig.java文档见 base-arrow-flight.rstarrow-flight.server-ssl-enabledtrue显式启用 TLSarrow-flight.server-ssl-certificateFlight 服务器的 SSL 证书路径arrow-flight.client-ssl-certificateFlight 客户端用于 mTLS 认证的 SSL 证书路径arrow-flight.client-ssl-keyFlight 客户端对应的 SSL 私钥路径。官方文档 base-arrow-flight.rst 指出启用 mTLS 时这些客户端证书属性必须与既有的服务器 SSL 配置配合使用并确保服务器信任客户端证书通常通过共享 CA 实现。5. PostgreSQL 连接器支持 GEOMETRY 类型PostgreSQL 连接器新增了对 Presto 空间类型GEOMETRY的支持PR #25240使得地理空间数据可以在 PostgreSQL 数据源与 Presto 空间函数生态之间无缝流转配合空间索引执行ST_Contains等谓词下推或引擎内计算。6. Worker 间/协调器间启用 HTTP/2 通信0.295 支持在 worker 上配置 HTTP/2 服务器用于 coordinator 与 worker 之间的通信。启用方式是在配置文件中设置http-server.http2.enabledtrue该能力来自 PR #25708属于性能与协议层面的优化方向。7. 跨集群查询重试Cross-Cluster Query Retry0.295 引入了跨集群查询重试机制PR #25625当主集群上的查询失败时可以通过提供重试 URL 和过期时间作为查询参数自动在备份集群上重试该查询。与之配套的通用改动还包括在 statement API 响应中新增X-Presto-Retry-Query请求头用于标识正在备份集群上重试的查询。该请求头常量定义于 PrestoHeaders.javaPRESTO_RETRY_QUERY X-Presto-Retry-Querystatement API 响应新增带max-age的Cache-Control头PR #25433。General Changes通用引擎改动细节缺陷修复修复 legacy timestamp 语义下localtime与current_time的问题PR #25985在旧的 timestamp 语义模式下这两个函数的取值结果此前存在偏差修复map(varchar, json)未对值进行规范化canonicalize的 bugPR #24232涉及 functions/map 文档 所描述的行为修复添加 exchange 与本地 exchange 优化器对含唯一列查询计划的简化逻辑PR #25882修复预处理语句prepared statement或创建视图时表名为带引号保留字导致的失败PR #25528同时改进了 SHOW CREATE VIEW 输出中表名引用的保留修复溢写spilling期间弱密码套件问题改用更强的加密算法PR #25603。新增能力SHOW COLUMNS增加 Scale / Precision / Length 列PR #25351现在 SHOW COLUMNS 可以返回数值类型的小数位Scale与精度Precision以及CHAR/VARCHAR字段的长度Length方便审计与元数据工具使用新增max_serializable_object_size会话属性PR #25616用于调整 coordinator 端最大可序列化对象大小应对大型对象序列化的内存与协议限制新增array_sort(array, function)与array_sort_desc(array, function)键排序支持PR #25851允许按自定义键函数如x - x[key]对数组元素排序相关函数说明见 functions/array 文档新增基于数据库的会话属性管理器database-based session property managerPR #24995对应仓库中的 presto-db-session-property-manager 模块管理文档见 session-property-managers为大规模集群提供了集中化、可持久化的会话属性下发方式statement API 响应新增Cache-Control头带 max-age便于代理层缓存查询结果元数据PR #25433新增presto-sql-helpers目录承载内联 SQL 调用函数插件并定义了插件加载规则PR #26025 / #25818新增presto-native-sql-invoked-functions-plugin插件包含除已被原生实现覆盖之外的其余内联 SQL 函数PR #25870C worker 与 coordinator 均支持 thrift codec 传输 connector 特定数据PR #25595 / #25242提升协议效率改进含特殊字符列名的DELETE操作PR #25737支持在 coordinator 上启用 Netty 客户端进行 HTTP 通信PR #25573设置配置属性reactor.netty-http-client-enabledtrueDELETE查询支持将修改的分区识别为 QueryIOMetadata 输出PR #26134为血缘lineage追踪提供支撑事件监听器可上报新建/插入列的 lineage 细节PR #25913测试框架新增assertStartTransaction与assertEndTransaction方法PR #25053便于非自动提交事务场景的测试支持使用 MariaDB Java 客户端连接基于 MySQL 的 function serverPR #25698BuiltInFunctionHandle 的 JSON 构造器支持BuiltInFunctionKind枚举参数PR #25821Provisio 打包升级插件打包拆分为plugins与native-plugin两个目录PR #25984memory connector 插件打包到native-plugin目录下PR #26044。从源码看query_max_queued_time的完整链路以新增的排队时间上限为例可以看到从配置到执行的完整链路QueryManagerConfig.java 声明Config(query.max-queued-time)配置文件键SystemSessionProperties.java 将其注册为会话属性query_max_queued_time默认值继承自配置会话级取值通过session.getSystemProperty(QUERY_MAX_QUEUED_TIME, Duration.class)读取见 SystemSessionProperties.java供调度层在查询排队时判断是否超时终止。PrestissimoNative Execution改动原生执行引擎在本版本中修复与增强并举修复修复同一计划节点从多个数据源处理多个 split 时的问题PR #26031修复常量折叠constant folding对深层嵌套调用语句的处理PR #26088修复启用 sidecar 集群中的常量折叠问题PR #26125。增强sidecar 查询分析启用 Presto 内置函数PR #25135提升原生执行对内置函数的解析能力NativeTypeManager 支持参数化VARCHAR类型PR #26003CHAR(N)类型在 PrestoC 中的受限使用PR #25843查询中的CHAR(N)被映射为 Velox 的VARCHAR类型因此执行引擎中不再保留CHAR(N)的语义如尾部空格填充规则新增空间连接支持PR #25823新增若干会话属性native_index_lookup_join_max_prefetch_batches控制索引查找连接index lookup join预取输入批次的最大数量设为0时每次只处理一个输入批次PR #25886native_index_lookup_join_split_output设为true时索引连接算子可能根据输出批次大小控制将每个输入批次的输出拆分否则尽量为每个输入批次产生单个输出PR #25886native_unnest_split_output与上类似控制 unnest 算子的输出拆分行为PR #25886native_debug_memory_pool_name_regex与native_debug_memory_pool_warn_threshold_bytes辅助排查内存池使用模式PR #25750native_query_trace_node_ids更名为native_query_trace_node_id现在只接受单个计划节点 id 用于查询追踪PR #25684coordinator 启动时校验 sidecar 函数签名与插件加载的函数签名一致性PR #25919。Security Changes安全修复汇总本版本集中处理了多项安全相关议题修复 Content Security PolicyCSP新增form-action self并将img-src限制为self响应 CWE-693PR #25910强化 WebUI 的 XSS 防护Netty 升级至 4.1.126.Final修复 CVE-2025-58056 与 CVE-2025-58057PR #26006commons-lang3 升级至 3.18.0修复 CVE-2025-48924PR #25751jaxb-runtime 升级至 v4.0.5修复 CVE-2020-15250PR #26024netty 依赖升级修复 CVE-2025-55163PR #25806reactor-netty-http 依赖升级修复 CVE-2025-22227PR #25739。升级到 0.295 可同时消除上述已知 CVE这也是安全合规角度必须升级的重要理由。JDBC Driver 与 Web UI 改动JDBC Driver查询构建器query builder新增DECIMAL类型支持PR #25699便于以编程方式构造含十进制数值条件的查询Web UI修复查询 id 悬浮提示tooltip显示位置不正确的问题PR #25809。各连接器改动一览Arrow Flight新增 mTLS 认证支持PR #25388配置方式见上文 Highlights 第 4 点。BigQuery修复SELECT查询失败问题将 BigQuery v1beta1 与 protobuf-java 3.25.8 对齐避免与 protobuf 4.x 的运行时不兼容PR #25805新增大小写敏感标识符支持在 catalog 文件中设置case-sensitive-name-matchingtruePR #25764。Cassandra支持将TUPLE类型读取为 PrestoVARCHARPR #25516。ClickHouse新增大小写敏感标识符支持设置case-sensitive-name-matchingtruePR #25863。Delta Lake / Hudi均升级至 Hadoop 3.4.1PR #24799。Hive修复查询system.jdbc.columns时忽略不支持的表格式避免报错PR #25779新增会话属性hive.orc_use_column_names切换为按 ORC 文件中记录的列名访问列而非按文件中的序号位置PR #25285Hadoop 升级至 3.4.1PR #24799。Iceberg修复 schema 未提供时getViewsAPI 的空指针异常NPEPR #25695修复 commit 实现由两步操作合并为一步PR #25615修复当列作为非 identity transform 的源列时重命名失败的问题PR #25697apply_changelog函数从全局命名空间迁移到连接器专属命名空间现使用iceberg.system.apply_changelog()调用PR #25871属性机制支持一个属性接受并处理多种类型的属性值PR #25862同时支持添加列时指定多个 transform新增 Iceberg bucket 标量函数PR #25951新增iceberg.engine.hive.lock-enabled配置用于禁用 Hive 锁PR #25615Iceberg 升级至 1.8.1PR #25999、Nessie 升级至 0.95.0PR #25593、Hadoop 升级至 3.4.1PR #24799更新为实现ConnectorMetadata::finishDeleteWithOutput()PR #26134。Kudu更新为实现ConnectorMetadata::finishDeleteWithOutput()PR #26134。MongoDB新增大小写敏感标识符支持设置case-sensitive-name-matchingtruePR #25853MongoDB Java driver 升级至 3.12.14PR #25436。PostgreSQL新增GEOMETRY类型支持PR #25240。Redis增加 TLS 支持PR #25373。SPI 变化连接器开发者需要关注0.295 在 SPI 层面引入了多项接口演进新增getSqlInvokedFunctionsSPIPR #25597仅支持 SQL 调用函数的注册是前述函数插件化的 SPI 基础。仓库中presto-sql-helpers两个插件的实现均基于该方法见 SqlInvokedFunctionsPlugin.java新增ConnectorMetadata::finishDeleteWithOutput()方法PR #26134返回OptionalConnectorOutputMetadata允许实现DELETE的连接器识别查询中修改的分区对血缘追踪非常重要。实现位于 ConnectorMetadata.java其默认实现委托给旧的finishDelete()并返回Optional.empty()因此已有连接器无需改动即可继续工作弃用ConnectorMetadata::finishDelete()PR #26134新方法默认委托旧方法保证向后兼容见 ConnectorMetadata.java新增AuthenticatorNotApplicableExceptionPR #25606避免把与当前认证方式无关的认证器错误返回给客户端改善多认证器场景下的错误信息准确性。Documentation Changes文档配套更新改进 Homebrew 部署文档PR #25924新增 release-process 与 version-support 两篇文档PR #25742分别说明版本发布流程与版本支持策略便于用户评估升级节奏。升级建议与注意事项总结综合以上内容升级到 0.295 时建议按以下顺序完成核查JVM 环境确认所有 coordinator 与 worker 节点已安装 Java 17客户端与 Presto-on-Spark 可维持 Java 8函数插件配置根据集群形态Java 集群 / 无 sidecar 原生集群 / 带 sidecar 原生集群在etc/plugin或打包目录中正确放置并加载对应的 SQL 调用函数插件切勿同时加载两个插件新增配置项按需启用query.max-queued-time排队熔断、http-server.http2.enabledHTTP/2 通信、reactor.netty-http-client-enabledNetty HTTP 客户端、Arrow Flight 的 mTLS 四件套属性、各连接器的case-sensitive-name-matching等安全补丁收益升级即同步修复 Netty、commons-lang3、jaxb-runtime、reactor-netty-http 的多个 CVESPI 兼容性自定义连接器无需修改即可继续运行但建议后续迁移到新的finishDeleteWithOutput()以获得 DELETE 血缘能力跨集群重试能力如需启用需要规划备份集群与重试 URL/过期时间的传递方式配合X-Presto-Retry-Query头识别重试查询。本文所有功能说明均以仓库内 release-0.295.rst 及对应源码、配置与文档为事实依据读者可依据上述相对路径在仓库中进一步查阅实现细节。【免费下载链接】prestoThe official home of the Presto distributed SQL query engine for big data项目地址: https://gitcode.com/gh_mirrors/pre/presto创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表