尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Presto 0.251 版本发布详解:BigQuery 连接器落地、缓存亲和性优化与表约束能力增强

Presto 0.251 版本发布详解:BigQuery 连接器落地、缓存亲和性优化与表约束能力增强 大数据数据库后端【免费下载链接】prestoThe official home of the Presto distributed SQL query engine for big data项目地址https://gitcode.com/gh_mirrors/pre/presto点击查看免费下载本指南基于 Presto 官方仓库的 Release 0.251 发布说明位于presto-docs/src/main/sphinx/release/release-0.251.rst逐项解读该版本引入的 BigQuery 连接器、internal-communication.memoize-dead-nodes-enabled缓存亲和性优化、NOT NULL约束强制执行、JDBC 连接器用户名密码支持以及 Hive Alluxio 缓存配额与驱逐策略等变更。阅读完本文你将掌握每个新特性的启用方式、配置参数、底层实现模块位置以及升级到 0.251 后需要关注的配置项与行为变化。版本概览一次连接器 内核能力双线推进的发布Release 0.251 是 PrestoFacebook 分支即当前 README.md 所描述的分布式 SQL 查询引擎的一个功能型版本官方将其Highlights聚焦于一项首次引入 BigQuery 连接器BigQuery Connector。与此同时该版本在内核层面同步推进了多项能力包括 ORC 写入性能、节点故障期间的缓存亲和性、NOT NULL约束强制执行、Hive Alluxio 缓存管理等横跨核心引擎、连接器与验证工具三大领域。完整的变更清单可在 presto-docs/src/main/sphinx/release/release-0.251.rst 中查看该文件已被收录进 release 索引且随后还发布了修补版本release-0.251.1。按变更领域划分本版本的主要改动如下领域变更内容类型General提升 ORC writer 对字符串列string columns的写入性能性能改进General新增internal-communication.memoize-dead-nodes-enabled节点下线时避免重新分区新特性General支持对NOT NULL列校验值以强制执行约束新特性JDBC Connector新增对用户名和密码的支持新特性BigQuery Connector首次引入 BigQuery 连接器新连接器Hive使用 Alluxio 缓存时支持缓存配额cache quota新特性Hive新增cache.alluxio.eviction-policy配置缓存驱逐策略新配置Verifier提高重试次数与确定性分析determinism analysis上限工具改进下文将按新连接器 → 内核 General 变更 → 连接器与工具变更的顺序展开解读。BigQuery 连接器0.251 的最大亮点连接器的引入与文档入口Release 0.251 正式引入 BigQuery 连接器官方发布说明通过:doc:指令直接指向连接器使用文档。该文档位于 presto-docs/src/main/sphinx/connector/bigquery.rst是上手 BigQuery 连接器的第一手资料。模块结构与源码佐证连接器在仓库中以独立 Maven 模块presto-bigquery呈现对应 presto-bigquery/pom.xml。从源码结构看该模块共包含 27 个 Java 源文件覆盖了连接器的完整生命周期组件入口与装配BigQueryPlugin、BigQueryConnectorFactory、BigQueryConnector、BigQueryConnectorModule依赖注入装配元数据与计划BigQueryMetadata、BigQueryTableHandle、BigQueryColumnHandle、BigQueryTableLayoutHandle、BigQueryHandleResolver读取链路BigQuerySplitManager、BigQuerySplit、BigQueryPageSourceProvider、BigQueryResultPageSource、ReadSessionCreator、ReadRowsHelper、BigQueryReadClientFactory配置与认证BigQueryConfig、BigQueryCredentialsSupplier、ReadSessionCreatorConfig类型与工具BigQueryType、Conversions、BigQueryUtil、BigQueryErrorCode等。这些类全部位于presto-bigquery/src/main/java/com/facebook/presto/plugin/bigquery/目录下其中BigQuerySplitManager与ReadSessionCreator的组合负责通过 BigQuery Storage Read API 生成读取会话与拆分splitBigQueryResultPageSource负责将读取结果转译为 Presto 的 Page 数据流。配置参数凭据与项目信息连接器的核心配置集中在 BigQueryConfig.java 中。源码通过Config注解暴露了以下关键参数该文件路径为presto-bigquery/src/main/java/com/facebook/presto/plugin/bigquery/BigQueryConfig.java配置项说明源码依据bigquery.credentials-keyBase64 编码的凭据密钥credentials key与 credentials-file 二选一setCredentialsKeybigquery.credentials-fileJSON 凭据文件的路径与 credentials-key 二选一setCredentialsFilebigquery.parent-project-id父项目 IDparent project id用于计费等场景setParentProjectId认证逻辑上BigQueryCredentialsSupplier优先使用显式配置的凭据源码中AssertTrue校验表明必须指定bigquery.credentials-key或bigquery.credentials-file其中之一否则会尝试创建默认的 GoogleCredentials且两者不能同时配置。一个最小化的 catalog 配置示例配置于etc/catalog/目录下的 properties 文件中如下connector.namebigquery bigquery.credentials-file/path/to/service-account-key.json bigquery.parent-project-idmy-gcp-project使用方式连接器引入后即可在查询中直接引用 BigQuery 数据集例如-- 查看 BigQuery 项目中的数据集 SHOW SCHEMAS FROM bigquery; -- 查询某张表 SELECT * FROM bigquery.dataset_name.table_name LIMIT 100;需要强调的是连接器要求所在环境能够访问 Google Cloud 并正确配置凭据凭据缺失时的降级行为尝试默认 GoogleCredentials依赖运行环境的 Application Default Credentials 支持。General Changes 深度解读ORC writer 字符串列写入性能改进Release 0.251 提升了 ORC writer 对字符串列string columns的写入性能。这一改进直接影响使用 ORC 格式的 Hive 等连接器的数据写入吞吐。ORC 相关实现位于presto-orc模块presto-orc/pom.xml读者可在presto-orc/src/main/java下找到 writer、编码器如 dictionary encoding 相关类与列统计实现结合本版本变更深入分析字符串列的编码路径。发布说明未给出具体的性能量化数据因此在生产环境评估收益时应以自身数据集的基准测试为准。缓存亲和性internal-communication.memoize-dead-nodes-enabled当集群中的节点短暂下线时Presto 通常会对数据进行重新分区repartitioning这会导致 shuffle 数据分布变化、缓存命中率cache affinity hit rate下降。0.251 通过新增配置属性internal-communication.memoize-dead-nodes-enabled解决了这一问题在有限时间内记住已下线节点避免因节点临时故障而触发大规模重分区从而提升缓存亲和性命中率。该配置在源码中的定义位于 InternalCommunicationConfig.java路径presto-internal-communication/src/main/java/com/facebook/presto/server/InternalCommunicationConfig.java关键实现如下private boolean memoizeDeadNodesEnabled; Config(internal-communication.memoize-dead-nodes-enabled) ConfigDescription(Enables memoizing dead nodes in discovery node manger) public InternalCommunicationConfig setMemoizeDeadNodesEnabled(boolean memoizeDeadNodesEnabled) { this.memoizeDeadNodesEnabled memoizeDeadNodesEnabled; return this; }启用方式在etc/config.properties中internal-communication.memoize-dead-nodes-enabledtrue该配置默认值为falseJava 布尔字段默认值即默认不启用记忆死节点行为。需要提醒的是这一特性针对的是短暂/临时性节点下线场景若节点长时间不可用仍应按常规机制将其从集群中剔除避免数据分布失真。NOT NULL 约束强制执行本版本新增了对NOT NULL约束的支持通过对NOT NULL列的实际值进行校验来强制执行约束。这意味着写入或更新数据时若NOT NULL列出现空值将不再被静默接受。从仓库的 SPI 层看表约束table constraint体系已具备完整的类型支撑NotNullConstraint.java路径presto-spi/src/main/java/com/facebook/presto/spi/constraints/定义了非空约束的数据结构同目录下还有PrimaryKeyConstraint、UniqueConstraint以及基类TableConstraint后者通过JsonSubTypes注册了notnullconstraint等子类型便于跨节点序列化传递TableConstraintsHolder.java 中的validateTableConstraints负责对约束集合做合法性校验。在引擎侧presto-main-base模块中AlterColumnNotNullTask.java 负责处理ALTER COLUMN ... SET NOT NULL之类的语句通过metadata.addConstraint(session, tableHandle, new NotNullConstraint(column))将约束写入元数据ShowQueriesRewrite.java 在重写SHOW类查询时会过滤并呈现NotNullConstraint使约束可通过元数据查询可见。可见0.251 的约束能力是SPI 数据结构 引擎 DDL 任务 元数据查询三层协同的结果。实际执行中连接器/引擎在写入路径上会校验NOT NULL列的值是否为 NULL违反约束的写入将被拒绝。JDBC Connector支持用户名与密码Release 0.251 为 JDBC 连接器新增了**用户名和密码username and password**的支持使基于 JDBC 的各类连接器如 MySQL、PostgreSQL、SQL Server 等能够通过连接属性传递认证信息。相关基础实现位于presto-base-jdbc模块presto-base-jdbc/pom.xml各具体数据库连接器如 presto-mysql、presto-postgresql复用该模块的连接与属性处理逻辑。在实际配置中可通过 catalog properties 传递连接属性例如connector.namemysql connection-urljdbc:mysql://host:3306 connection-usermyuser connection-passwordmypassword该变更使得依赖 JDBC 用户名/密码认证的数据库能够以标准方式接入 Presto具体属性名因连接器而异建议以对应连接器文档及presto-base-jdbc中的配置类为准。Hive 变更Alluxio 缓存配额与驱逐策略Release 0.251 对 Hive 连接器的 Alluxio 缓存能力进行了两处增强缓存配额cache quota使用 Alluxio 缓存时支持设置配额避免缓存无限增长占用过多本地/分布式存储驱逐策略配置新增配置属性cache.alluxio.eviction-policy用于设置 Alluxio 缓存的驱逐策略。cache.alluxio.eviction-policy的四种取值Alluxio 缓存配置类位于 AlluxioCacheConfig.java路径presto-cache/src/main/java/com/facebook/presto/cache/alluxio/AlluxioCacheConfig.java其中定义了private EvictionPolicy evictionPolicy EvictionPolicy.LRU; Config(cache.alluxio.eviction-policy) ConfigDescription(The cache eviction policy) public AlluxioCacheConfig setEvictionPolicy(EvictionPolicy evictionPolicy)驱逐策略的取值定义在 EvictionPolicy.java路径presto-cache/src/main/java/com/facebook/presto/cache/alluxio/EvictionPolicy.java中每个枚举值对应 Alluxio 客户端的缓存驱逐器类枚举值对应 Alluxio 驱逐器实现策略含义FIFOalluxio.client.file.cache.evictor.FIFOCacheEvictor先进先出LFUalluxio.client.file.cache.evictor.LFUCacheEvictor最不经常使用LRUalluxio.client.file.cache.evictor.LRUCacheEvictor最近最少使用默认值UNEVICTABLEalluxio.client.file.cache.evictor.UnevictableCacheEvictor不可驱逐适合受保护的热数据从源码可见evictionPolicy字段的默认值为EvictionPolicy.LRU因此不配置该属性时默认采用 LRU 策略。配额及其他相关配置同文件AlluxioCacheConfig.java还提供了与缓存行为紧密相关的配置可与驱逐策略组合使用cache.alluxio.max-cache-sizeAlluxio 缓存的最大可用空间默认 2GB即new DataSize(2, GIGABYTE)cache.alluxio.quota-enabled是否启用缓存配额对应本版本的cache quota支持默认关闭cache.alluxio.eviction-retries驱逐重试的最大次数默认 10cache.alluxio.async-write-enabled是否异步写入缓存cache.alluxio.timeout-enabled/cache.alluxio.timeout-duration缓存操作超时开关与时长默认启用、60 秒cache.alluxio.metrics-enabled、cache.alluxio.jmx-class、cache.alluxio.metrics-domain缓存指标采集与 JMX 暴露配置。一个启用配额并切换驱逐策略的 Hive catalog 配置示例connector.namehive hive.cache.enabledtrue hive.cache.alluxio.max-cache-size100GB cache.alluxio.eviction-policyLFU cache.alluxio.quota-enabledtrue需要注意的是Alluxio 缓存相关依赖alluxio-core-client-hdfs、alluxio-core-client-fs、alluxio-core-common在 presto-cache/pom.xml 中声明使用该能力前需确认运行环境已具备相应的 Alluxio 部署与配置。Verifier 变更重试与确定性分析上限提升Presto Verifier 是用于对比验证两个 Presto 集群/查询行为一致性的工具实现位于 presto-verifier。0.251 提高了 verifier 的重试次数retry与确定性分析determinism analysis限制。在验证流程中当一次查询出现失败或结果不确定时Verifier 会进行重试与确定性检查例如重复执行以确认结果是否稳定。提高这两项上限意味着对偶发失败容忍度更高减少因瞬时抖动导致的误报对结果不确定的查询能做更多轮次的重复验证提升确定性判断的可靠性。代价是单条查询的验证耗时可能增加因此在高并发验证场景下需要结合 verifier 的并发/限流配置综合权衡。升级到 0.251 的检查清单综合本版本变更升级时建议按以下顺序核对新增 BigQuery 连接器如需使用创建 catalog 文件并配置bigquery.credentials-key/bigquery.credentials-file二选一与bigquery.parent-project-id缓存亲和性若集群存在节点频繁短时重启的场景可在config.properties中开启internal-communication.memoize-dead-nodes-enabledtrue默认关闭NOT NULL 约束确认下游连接器/写入链路对NOT NULL列的校验行为避免因新增约束校验导致原本可写入的空值被拒绝Hive Alluxio 缓存如需限制缓存规模启用cache.alluxio.quota-enabled并按需设置cache.alluxio.eviction-policy默认 LRU与cache.alluxio.max-cache-sizeVerifier注意重试与确定性分析上限提升带来的验证耗时变化。参考与延伸阅读本版本完整变更清单presto-docs/src/main/sphinx/release/release-0.251.rst版本索引含后续 0.251.1 修补版presto-docs/src/main/sphinx/release.rstBigQuery 连接器使用文档presto-docs/src/main/sphinx/connector/bigquery.rstBigQuery 连接器源码入口presto-bigquery/src/main/java/com/facebook/presto/plugin/bigquery/内部通信配置类presto-internal-communication/src/main/java/com/facebook/presto/server/InternalCommunicationConfig.javaAlluxio 缓存配置与驱逐策略枚举presto-cache/src/main/java/com/facebook/presto/cache/alluxio/AlluxioCacheConfig.java、EvictionPolicy.javaNOT NULL 约束 SPI 定义presto-spi/src/main/java/com/facebook/presto/spi/constraints/NotNullConstraint.javaDDL 任务实现见 AlterColumnNotNullTask.java赞分享大数据数据库后端【免费下载链接】prestoThe official home of the Presto distributed SQL query engine for big data项目地址https://gitcode.com/gh_mirrors/pre/presto点击查看免费下载相关推荐Presto 0.216 版本发布说明详解新函数、查询优化与连接器能力增强Presto 0.216 版本发布说明详解新函数、查询优化与连接器能力增强 本指南基于 Presto 开源仓库中的官方发布说明 release 0.216.r大数据数据库后端Presto 0.261 版本发布详解DECIMAL 聚合性能优化、Hive 隐藏列、Iceberg LocationProvider 与连接器增强Presto 0.261 版本发布详解DECIMAL 聚合性能优化、Hive 隐藏列、Iceberg LocationProvider 与连接器增强 本篇技术大数据数据库后端Presto 0.233 版本发布详解软亲和调度、异步页传输与连接器生态增强Presto 0.233 版本发布详解软亲和调度、异步页传输与连接器生态增强 导读 本文基于 Presto 官方仓库的 Release 0.233 发布说明大数据数据库后端上一篇探索高效iOS应用内路由方案HHRouter下一篇Sunshine 游戏串流教程10 分钟装好并连上客户端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表