❤️❤️❤️❤️❤️❤️ 我们已经正式推出微信小程序,在微信中搜索 TrendForge Pro 即可使用小程序,如果使用 Telegram 请搜索 trendforge_tg ❤️❤️❤️❤️❤️❤️
学习目标:能够理解Trino的基本架构,在本地成功构建并运行一个开发/测试版本的Trino服务器,并使用CLI执行简单的SQL查询。
前置知识
Trino项目使用Java编写,理解Java语法、面向对象概念和基本的Maven项目结构是阅读和运行代码的基础。
Trino使用Maven进行构建和依赖管理,需要了解如何使用Maven命令(如clean, install)来编译项目。
Trino是一个SQL查询引擎,了解基本的SQL语法(如SELECT, FROM, WHERE)是使用和测试它的前提。
需要在终端执行构建命令、运行CLI等操作。
项目构建可能需要Docker环境(根据README),用于某些测试或依赖。
学习步骤
环境准备与项目初探
2-3小时检查并安装必要软件
根据README,确保你的系统(Mac OS X或Linux)满足要求:安装Java 25.0.1+(64位)、Docker,并确保SELinux等不影响源码目录写入。如果是Apple Silicon Mac,需安装Rosetta 2。
可以使用 `java -version` 和 `docker --version` 命令来验证安装。
克隆项目到本地
使用Git将Trino项目克隆到本地:`git clone https://github.com/trinodb/trino.git`,然后进入项目根目录。
浏览项目结构
在IDE(推荐IntelliJ IDEA)中打开项目,或直接在文件系统中查看。重点了解核心模块如 `trino-main` (主服务器)、`trino-spi` (服务提供者接口)、`trino-cli` (命令行客户端)以及各个connector模块(如`trino-tpch`)。
首次构建项目
1-2小时(取决于网速)执行Maven构建
在项目根目录下,运行README中提供的命令:`./mvnw clean install -DskipTests`。这个命令会下载所有依赖并编译项目,跳过耗时的测试。
首次构建会下载大量依赖到 `~/.m2/repository`,请保持网络通畅。后续构建会快很多。
验证构建结果
构建成功后,可以在各模块的 `target` 目录下找到生成的JAR文件。例如,CLI可执行JAR的路径为 `client/trino-cli/target/trino-cli-*-executable.jar`。
在IDE中运行与体验
3-4小时配置IDE项目
在IntelliJ IDEA中,确保项目SDK配置为JDK 25,项目语言级别设置为25。
运行测试服务器(最简单方式)
在IDE中找到并运行 `TpchQueryRunner` 类(通常在 `trino-tpch` 模块中)。这会在本地启动一个集成了TPCH连接器的Trino开发服务器。注意可能需要添加VM选项 `--add-modules jdk.incubator.vector`。
这是快速验证服务器能否启动并运行查询的最便捷方法。
使用CLI连接并查询
在终端中,导航到 `client/trino-cli/target` 目录,运行 `java -jar trino-cli-*-executable.jar` 启动CLI。默认会连接到本地运行的 `TpchQueryRunner` 服务器。尝试执行README中的示例查询:`SELECT * FROM tpch.tiny.region;` 和 `SELECT * FROM system.runtime.nodes;`。
如果CLI连接失败,检查服务器是否正在运行,以及CLI的默认连接参数(如端口)是否与服务器匹配。
运行完整开发服务器
1-2小时配置并运行DevelopmentServer
在IDE中创建一个运行配置:主类为 `io.trino.server.DevelopmentServer`;VM选项参考README或对应模块pom.xml中的 `air.test.jvm.additional-arguments` 属性(通常包含 `--add-modules jdk.incubator.vector`);工作目录设置为 `$MODULEDIR$`(自动指向 `trino-server-dev` 模块目录);使用 `trino-server-dev` 模块的类路径。然后运行此配置。
`DevelopmentServer` 使用了 `testing/trino-server-dev/etc` 下的配置文件,你可以在这里修改 `config.properties` 和 catalog配置。
探索插件与Catalog配置
查看 `trino-server-dev` 模块下的 `config.properties` 文件,理解 `plugin.bundles` 如何指定插件。在 `testing/trino-server-dev/etc/catalog` 目录下查看或创建连接器的属性文件(如 `tpch.properties`)。尝试修改配置,重启服务器观察变化。
推荐资源
官方用户手册,包含部署、配置、连接器使用、SQL语法等最全面的信息。
项目内的DEVELOPMENT文件,包含开发流程、代码风格和插件实现指南,是参与贡献的必读材料。
项目贡献指南,说明了提交代码的要求和流程。
遇到问题时,可以在这里向社区提问或搜索历史讨论。
学习路径常见错误
Java版本不匹配
严格使用Java 25.0.1+(64位)。使用 `java -version` 确认版本和位数,并在IDE中正确配置项目SDK。
构建时内存不足或超时
首次构建依赖下载量大且耗时,确保网络稳定。可以考虑为Maven设置更大的堆空间(如 `MAVEN_OPTS=-Xmx2g`)或在网络条件好时进行。
运行 `TpchQueryRunner` 或 `DevelopmentServer` 时缺少VM参数
务必添加 `--add-modules jdk.incubator.vector` 参数。其他必要参数请参考对应模块 `pom.xml` 中的 `air.test.jvm.additional-arguments` 属性。
CLI连接服务器失败
首先确认服务器已成功启动(查看日志无错误)。确认CLI连接的地址和端口(默认 `localhost:8080`)与服务器监听地址一致。检查是否有防火墙或端口冲突。
修改配置后服务器行为未改变
确保修改的是正确的配置文件(`trino-server-dev` 模块下的配置文件)。修改后需要完全重启服务器,而不仅是重新运行main方法(在IDE中停止再启动)。
学习路径下一步步骤
1. 深入阅读一个连接器(如`trino-tpch`或`trino-hive`)的源码,理解SPI接口如何被实现。 2. 尝试实现一个简单的自定义函数(UDF)或连接器插件。 3. 学习如何配置一个多节点的Trino集群进行测试。 4. 阅读查询执行计划,了解Trino如何解析、优化和执行SQL。 5. 关注项目GitHub的Issues和Pull Requests,尝试解决一个简单的Good First Issue。
相关项目推荐
Snailclimb/JavaGuide
「Java学习+面试指南」涵盖大多数Java程序员需掌握的核心知识。备战Java面试,首选JavaGuide!
krahets/hello-algo
《Hello 算法》:动画图解、一键运行的数据结构与算法教程。支持 Python, Java, C++, C, C#, JS, Go, Swift, Rust, Ruby, Kotlin, TS, Dart 代码。简体版和繁体版同步更新,英文版翻译中
iluwatar/java-design-patterns
Java 实现的设计模式
spring-projects/spring-boot
Spring Boot 助您轻松创建基于 Spring 的生产级应用程序和服务
elastic/elasticsearch
免费开源的分布式 RESTful 搜索引擎
MisterBooo/LeetCodeAnimation
Demonstrate all the questions on LeetCode in the form of animation.(用动画的形式呈现解LeetCode题目的思路)