ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Presto 0.293 版本发布详解:Thrift 序列化、Router 增强、原生执行与连接器新特性全解读

Presto 0.293 版本发布详解:Thrift 序列化、Router 增强、原生执行与连接器新特性全解读 大数据数据库后端【免费下载链接】prestoThe official home of the Presto distributed SQL query engine for big data项目地址https://gitcode.com/gh_mirrors/pre/presto点击查看免费下载Presto 0.293 是 PrestoTrino 前身的开源分布式 SQL 查询引擎在协调器性能、原生执行Prestissimo、Presto Router 与安全能力方面的一次重要版本迭代。本文以官方 Release Notes 为骨架结合本仓库中的源码实现与配置示例逐条解析该版本的 Highlights 与各模块变更帮助你理解每个特性背后的实现原理与升级注意事项。Highlights本版本六大核心看点Release 0.293 的官方发布说明将以下变更列为重点修复 ROLLBACK 语句确保它能成功中止被失败语句破坏的非自动提交事务PR #23247引入 Thrift 序列化提升协调器性能PR #25079 与 #25020提升单节点执行下ORDER BY查询的性能PR #25022为 Presto Router 增加认证能力PR #24407、协调器健康检查PR #24449与自定义调度器插件支持PR #24439新增SHOW CREATE SCHEMA的 DDL 支持PR #24356新增字符串函数longest_common_prefix(string1, string2) - varchar()PR #24891访问控制新增行过滤row filtering与列掩码column masking支持PR #24277为 Presto Router UI 的静态资源增加安全响应头Content-Security-Policy、X-Content-Type-OptionsPR #25165为 Hive MetastoreHMS增加 SSL/TLS 加密支持PR #24745Iceberg 新增invalidate_manifest_file_cache()存储过程PR #24831MongoDB 连接器支持JSON类型PR #25089、MySQL 连接器支持GEOMETRY类型PR #24996Web UI 新增资源组Resource Group各子组排队与运行中查询数量展示PR #24830S3 文件系统运行时指标采集PR #24554。General Changes通用引擎改进事务与查询正确性修复ROLLBACK 修复此前在非自动提交non-auto commit事务中一旦某条语句执行失败导致事务状态被破坏ROLLBACK可能无法成功中止事务。0.293 修复了该问题保证事务可以被干净地回滚。Left Join → Semi Join 优化器修复修复了 left join 到 semi join 的优化转换中可能出现的 “filter source variable not found” 错误PR #25111。arrays_overlap(x, y) - boolean修复修复了镜像mirrored版本函数返回值不正确的问题PR #23845。second(x) - bigint()修复当时区偏移量精度达到秒级seconds granularity时该 UDF 返回错误结果的问题得到修复PR #25090。Redis HBO provider 加载问题修复PR #24835。性能优化协调器 Thrift 序列化0.293 在协调器的部分通信路径中引入 Thrift 序列化PR #25079、#25020以减少 Java 序列化开销提升大规模集群下协调器的吞吐与响应能力。从源码结构看presto-main-base与presto-main中的任务/查询状态上报链路是此次优化的主要承载点。ORDER BY单节点执行优化PR #25022针对单节点不涉及跨节点 Exchange的排序场景做了专门提速。运算符统计上报性能提升PR #24921减少算子统计信息上报的开销。复杂类型列读取内存优化PR #24912降低读取 complex type 列时的内存占用。空表扫描转换为空值节点PR #25155将无数据表扫描的查询计划转换为Values空值节点避免无谓执行。LOJ IS NULL查询优化PR #24884通过在半连接右侧增加 distinct 来提升该类查询的性能。新功能与配置项SHOW CREATE SCHEMADDL 支持PR #24356新增对SHOW CREATE SCHEMA语句的解析与执行支持便于用户查看 Schema 的创建语句。hive.metastore.catalog.name配置项PR #24235允许将 catalog 名称传递给 metastore从而支持基于 catalog 的 Schema 管理与过滤。cosine_similarity(x, y) - double()PR #25056为数组参数新增余弦相似度函数。原生执行类型重写支持PR #24916可通过配置属性native-execution-type-rewrite-enabled与会话属性native_execution_type_rewrite_enabled开启。会话属性query_client_timeoutPR #25210配置查询在客户端应用如 CLI失联多久后被判定为 abandoned 并终止。query_client_timeout 的源码实现该会话属性定义于 SystemSessionProperties.javapublic static final String QUERY_CLIENT_TIMEOUT query_client_timeout;其注册位于该文件的第 2458 行附近读取逻辑封装在session.getSystemProperty(QUERY_CLIENT_TIMEOUT, Duration.class)第 4196 行返回类型为Duration即该参数是一个时长类型。典型使用方式SET SESSION query_client_timeout 5m;也可在config.properties中通过query-client-timeout5m全局配置默认值。longest_common_prefix 的源码实现longest_common_prefix的实现位于 StringFunctions.javaDescription(returns the longest common prefix shared by two strings) ScalarFunction(longest_common_prefix) LiteralParameters({x, y}) SqlType(StandardTypes.VARCHAR) public static Slice longestCommonPrefix(SqlType(varchar(x)) Slice left, SqlType(varchar(y)) Slice right) { int i 0; int byteIndex 0; int[] leftCodePoints castToCodePoints(left); int[] rightCodePoints castToCodePoints(right); int leftLength leftCodePoints.length; int rightLength rightCodePoints.length; while (i leftLength i rightLength leftCodePoints[i] rightCodePoints[i]) { i; byteIndex SliceUtf8.lengthOfCodePointSafe(left, byteIndex); } return Slices.wrappedBuffer(left.getBytes(0, byteIndex)); }从实现可以推断两个关键设计按 Unicode 码点比较而非按字节函数先将两个字符串转换为码点数组再逐位比较因此对多字节 UTF-8 字符如中文、emoji也能返回正确的公共前缀不会在字符中间截断返回长度以字节计byteIndex通过lengthOfCodePointSafe累积最终left.getBytes(0, byteIndex)截取的是原字符串左起byteIndex字节返回值类型为varchar。示例SELECT longest_common_prefix(PrestoSQL, PrestoDB); -- Presto SELECT longest_common_prefix(你好世界, 你好Presto); -- 你好依赖与安全升级压缩编解码器配置重构PR #24670用exchange.compression-codec、fragment-result-cache.block-encoding-compression-codec分别取代exchange.compression-enabled、fragment-result-cache.block-encoding-compression-enabled、experimental.spill-compression-enabled支持 GZIP、LZ4、LZO、SNAPPY、ZLIB、ZSTD 六种编解码器。升级后需要按新配置名迁移。依赖替换将 PostgreSQL 驱动替换为 redshift-jdbc42以修复 CVE-2024-1597、CVE-2022-31197、CVE-2020-13692PR #25106。Netty 升级至 4.1.119.FinalPR #24971。PrestissimoNative ExecutionChanges原生执行引擎相关变更集中在批处理 Shuffle 与可观测性两方面批处理 Shuffle 排序序列化通过排序序列化提升 batch shuffle 性能PR #24953并进一步为每个 buffer 使用合适的排序键值PR #25015类型重写支持与通用变更中的native-execution-type-rewrite-enabled/native_execution_type_rewrite_enabled对应S3 文件系统运行时指标PR #24554采集 S3 文件系统级指标新增会话属性native_request_data_sizes_max_wait_secPR #24918控制 exchange long poll 请求的最大等待秒数新增会话属性native_streaming_aggregation_eager_flushPR #24947控制流式聚合是否尽快冲刷输出行新增会话属性native_debug_memory_pool_name_regexPR #24833用于跟踪匹配正则的内存池分配失败函数改用 Java 函数PR #24792启用原生执行时创建 failure functions 不再使用 native 函数移除 worker 配置属性register-test-functionsPR #24853。上述会话属性在源码中均位于 SystemSessionProperties.java 的 Native execution 相关区块第 419 行起有注释标注“Native execution related session properties”说明这些属性目前暂存于通用引擎模块未来可能会迁移位置。Router Changes调度、认证与健康检查Presto Router 在 0.293 中获得了多项重要能力自定义调度器插件支持PR #24439Router 允许通过插件机制加载自定义的调度器实现而不局限于内置调度算法。轮询调度器索引修复PR #24580修复 Round robin 调度器候选集群索引改为按 group 维护独立索引。认证能力PR #24407Router 增加认证支持可在路由层进行身份验证。协调器健康检查PR #24449Router 可对候选协调器执行健康检查及时摘除异常节点。计数器 JMX 指标PR #24449为 Router 增加计数器类 JMX 指标便于监控路由请求量。源码证据按组索引的 Round Robin 调度PR #24580 的修复在 RoundRobinScheduler.java 中有直接体现。该调度器维护了一个MapString, Integer candidateIndexByGroup即每个候选组group拥有独立的轮询游标public class RoundRobinScheduler implements Scheduler { private ListURI candidates; GuardedBy(this) private final MapString, Integer candidateIndexByGroup new HashMap(); private String candidateGroupName; Override public OptionalURI getDestination(RouterRequestInfo routerRequestInfo) { try { return Optional.of(candidates.get(candidateIndexByGroup.compute(candidateGroupName, (key, oldValue) - { if (oldValue null || oldValue 1 candidates.size()) { return 0; } return oldValue 1; }))); } catch (IllegalArgumentException e) { log.warn(e, Error getting destination for user routerRequestInfo.getUser()); return Optional.empty(); } } ... }该类的类注释还明确了一个使用约束“round-robin scheduler 将选中索引作为调度状态保存因此 candidates 在赋值后不应被修改”也就是说 RoundRobinScheduler 仅适用于候选节点列表保持稳定的场景。新增的其他调度器实现如 WeightedRoundRobinScheduler.java、UserHashScheduler.java、RandomChoiceScheduler.java与调度器类型枚举 SchedulerType.java 同处 presto-router 模块自定义调度器插件则通过 CustomSchedulerManager.java 与 RouterPluginManager.java 完成加载与生命周期管理。Router 的示例配置可参考 presto-router/etc/config.properties 与 presto-router/etc/router-config.json其路由规范定义在 RouterSpec.java。Security Changes安全加固0.293 的安全相关变更包括功能与依赖两个层面功能层面敏感信息日志脱敏PR #24886密码、访问密钥等敏感字段值在日志输出时会被 redact避免泄露Router UI 安全响应头PR #25165为 Presto Router UI 的静态资源增加Content-Security-Policy与X-Content-Type-Options响应头访问控制行过滤与列掩码PR #24277在 access control 层支持行级过滤与列级掩码并且扩展支持作用于视图PR #25052配合 0.293 中“将 ACL 检查延迟到 SQL 视图处理之后”的优化PR #24955、#24927可以推断该版本对视图场景下的权限评估链路做了整体梳理。依赖升级CVE 修复commons-beanutils 升至 1.9.4修复 CVE-2014-0114plexus-utils 升至 3.6.0修复 CVE-2017-1000487zookeeper 升至 3.9.3修复 CVE-2023-44981涉及 presto-accumulo、presto-delta、presto-hive、presto-kafka、presto-hudiMySQL 驱动升至 9.2.0修复 CVE-2023-22102kotlin-stdlib-jdk8 升至 1.9.25snappy-java 统一升至 1.1.10.4修复 CVE-2023-43642commons-compress 升至 1.26.2修复 CVE-2021-35517 等 5 个漏洞。上述升级均涉及你正在运行的连接器或公共依赖建议升级后回归相关连接器功能。Web UI Changes资源组子组查询数量展示PR #24830Web UI 中每个 Resource Group 的子组现在会显示排队中queued与运行中running的查询数量便于观察资源组负载分布。对应 UI 实现位于 presto-ui 模块如 res_groups.jsx。Connector Changes各连接器更新Delta Lake Connector修复增量更新写入 null 值后读取超时的问题PR #24920。Elasticsearch Connector升级 elasticsearch 至 7.17.27修复 CVE-2024-43709PR #23894。Hive ConnectorS3 Web Identity 认证PR #24645在 S3 security mapping 中新增hive.s3.webidentity.enabled属性支持基于 Web Identity 的认证HMS SSL/TLS 加密PR #24745新增四个配置属性hive.metastore.thrift.client.tls.enabledhive.metastore.thrift.client.tls.keystore-pathhive.metastore.thrift.client.tls.keystore-passwordhive.metastore.thrift.client.tls.truststore-password启用示例写入 Hive catalog 的 properties 文件hive.metastore.thrift.client.tls.enabledtrue hive.metastore.thrift.client.tls.keystore-path/etc/presto/hms-keystore.jks hive.metastore.thrift.client.tls.keystore-passwordchangeit hive.metastore.thrift.client.tls.truststore-passwordchangeitS3 listPrefix 改用 listObjectsV2PR #24794PrestoS3FileSystem的listPrefix实现从 listObjects 迁移到 listObjectsV2降低 S3 列目录的 API 调用开销。Iceberg ConnectorNessie catalog 修复PR #24803修复使用 Nessie catalog 时出现的 “Unknown connector” 错误修复方式为传递完整 session缓存失效存储过程PR #24831catalog-name.system.invalidate_manifest_file_cache()使 ManifestFile 缓存失效catalog-name.system.invalidate_statistics_file_cache()使 StatisticsFile 缓存失效。其实现位于 ManifestFileCacheInvalidationProcedure.javapublic Procedure get() { return new Procedure( system, invalidate_manifest_file_cache, ImmutableList.of(), CACHE_DATA_INVALIDATION.bindTo(this)); } public void manifestFileCacheInvalidation() { try (ThreadContextClassLoader ignored new ThreadContextClassLoader(getClass().getClassLoader())) { manifestFileCache.invalidateAll(); } }可以看到该存储过程注册在systemschema 下、无参数内部通过注入的ManifestFileCache实例执行invalidateAll()。Statistics 文件缓存的失效逻辑与之对称见 StatisticsFileCacheInvalidationProcedure.java。使用示例CALL iceberg.system.invalidate_manifest_file_cache(); CALL iceberg.system.invalidate_statistics_file_cache();TimeType 桶变换支持PR #24829Iceberg 表TimeType列支持 bucket transform插入语句改走 AppendFilesPR #24989对 INSERT、CTAS 等仅插入语句将 RowDelta 替换为 AppendFiles减少元数据写入开销。JDBC Connector新增配置属性list-schemas-ignored-schemasPR #24994列出 Schema 时可忽略指定 Schema便于规避无权限或无关 Schema 的干扰。Kafka Connector支持可选的 Apache Kafka SASLPR #24798为 Kafka 连接器补充 SASL 认证选项。MongoDB Connector新增JSON类型支持PR #25089MongoDB 的文档字段可直接映射为 Presto 的JSON类型。MySQL Connector新增GEOMETRY类型支持PR #24996MySQL 的空间几何数据可映射为 Presto 的GEOMETRY类型。SQL Server Connector驱动升级至 12.8.1支持 NTLM 认证PR #24686。这是一个破坏性变更新驱动默认将encrypt属性置为true。若连接的是非 SSL 的 SQL Server 实例必须在连接配置中显式设置encryptfalse否则会出现连接问题。相关认证说明见 SQL Server 连接器文档的 authentication 章节presto-docs/src/main/sphinx/connector/sqlserver.rst。Documentation Changes新增原生 sidecar 与原生 sidecar 插件文档PR #24883对应页面为 presto-docs/src/main/sphinx/presto_cpp/sidecar.rst或presto_cpp目录下同名文档相关插件代码位于 presto-native-sidecar-plugin 模块。升级建议与注意事项配置迁移若你使用exchange.compression-enabled、fragment-result-cache.block-encoding-compression-enabled或experimental.spill-compression-enabled请迁移到新的*-compression-codec系列属性并显式指定编解码器GZIP/LZ4/LZO/SNAPPY/ZLIB/ZSTD。SQL Server 连接升级后检查 SQL Server catalog 配置非 SSL 实例必须补充encryptfalse。原生执行用户关注新增的native_request_data_sizes_max_wait_sec、native_streaming_aggregation_eager_flush、native_debug_memory_pool_name_regex会话属性同时注意register-test-functions已被移除。安全补丁0.293 修复了多个 CVE涉及 zookeeper、MySQL 驱动、snappy-java、commons-compress 等建议确认你的部署产物已包含这些升级。Router 使用者如需自定义路由策略可基于 Scheduler SPI 实现插件并通过 RouterPluginManager 加载同时注意 RoundRobinScheduler 要求候选列表稳定。Credits本版本由 Akinori Musha、Amit Dutta、Rebecca Schlussel、Zac Blanco、Tim Meehan 等社区贡献者共同完成完整贡献者名单见 release-0.293.rst。赞分享大数据数据库后端【免费下载链接】prestoThe official home of the Presto distributed SQL query engine for big data项目地址https://gitcode.com/gh_mirrors/pre/presto点击查看免费下载相关推荐Presto 0.243 版本发布详解新聚合函数、列级访问控制优化与连接器增强Presto 0.243 版本发布详解新聚合函数、列级访问控制优化与连接器增强 本篇技术指南以 Presto 0.243 版本发布说明 https://lin大数据数据库后端Presto 0.261 版本发布详解DECIMAL 聚合性能优化、Hive 隐藏列、Iceberg LocationProvider 与连接器增强Presto 0.261 版本发布详解DECIMAL 聚合性能优化、Hive 隐藏列、Iceberg LocationProvider 与连接器增强 本篇技术大数据数据库后端Presto 0.212 版本发布说明详解地理空间函数增强、Hive 连接器加固与 Thrift/Verifier 修复Presto 0.212 版本发布说明详解地理空间函数增强、Hive 连接器加固与 Thrift/Verifier 修复 本篇文章以 Presto 0.212大数据数据库后端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表