Trino 部署

集群规划

主机名 服务
trino1 coordinator
trino2 worker
trino3 worker

安装依赖

每台服务器安装 Java11 和 Python3,其中 Java 11 使用 Trino 官网推荐的 Azul Zulu 发行版,版本 JDK 11.0.14.1

注意:Trino 需要的 Java 版本为 64-bit 版本的 Java 11,且版本需要在 11.0.11 以上。Java 8 或 Java 11 更早的版本都不被支持。更新的版本如 Java12、 Java13、Java17 或许可用,但没有经过测试,官方并不推荐使用。

安装 Java11

创建安装路径:

为了和 cdh 集群统一,我就安装在了 /usr/java 目录下

$ sudo mkdir -p /usr/java

下载安装包:

$ cd /usr/java/
$ sudo wget https://cdn.azul.com/zulu/bin/zulu11.54.25-ca-jdk11.0.14.1-linux_x64.tar.gz

解压安装:

$ sudo tar -xzvf zulu11.54.25-ca-jdk11.0.14.1-linux_x64.tar.gz
……

创建软连接:

$ sudo ln -s zulu11.54.25-ca-jdk11.0.14.1-linux_x64 jdk11.0.14.1
$ sudo ln -s zulu11.54.25-ca-jdk11.0.14.1-linux_x64 jdk

配置环境变量:

$ sudo vim /etc/profile.d/java.sh
# 输入以下内容:

# JAVA 环境变量
export JAVA_HOME=/usr/java/jdk
# PATH
export PATH=$JAVA_HOME/bin:$PATH:.
# CLASSPATH
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:.

# wq 保存退出

# 使环境变量生效
$ source /etc/profile

测试:

$ java -version

# 输出结果:
openjdk version "11.0.14.1" 2022-02-08 LTS
OpenJDK Runtime Environment Zulu11.54+25-CA (build 11.0.14.1+1-LTS)
OpenJDK 64-Bit Server VM Zulu11.54+25-CA (build 11.0.14.1+1-LTS, mixed mode)

安装 Python3

使用 yum 安装即可:

$ sudo yum install python3 -y

测试:

$ python3 --version

# 输出结果:
Python 3.6.8

下载安装

创建包安装路径

$ sudo mkdir -p /opt/package
$ cd /opt/package

下载 Trino

$ sudo wget https://repo1.maven.org/maven2/io/trino/trino-server/371/trino-server-371.tar.gz

解压

$ sudo tar -xzvf trino-server-371.tar.gz
……

创建软连接

$ sudo ln -s trino-server-371 trino

基础配置

每台服务器的 Trino 安装目录中创建一个 etc 目录,进入目录并进行以下配置:

$ sudo mkdir etc
$ cd etc

node.properties

etc 目录下创建 node.properties 文件:

$ sudo vim node.properties

在文件内写入以下内容:

# 集群所有节点环境名称必须一样
node.environment=trino_cluster
# UUID,设置固定值在集群升级时可以保持和原来的一致
node.id=bd7a6033-c3d5-4086-b16a-d7bbaa2290e6
# 日志文件和数据文件储存目录,确认目录存在,不存在手动创建一下
node.data-dir=/data/trino

jvm.config

etc 目录下创建 jvm.config 文件:

$ sudo vim jvm.config

在文件内写入以下内容:

-server
-Xmx7G
-XX:-UseBiasedLocking
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+ExplicitGCInvokesConcurrent
-XX:+ExitOnOutOfMemoryError
-XX:+HeapDumpOnOutOfMemoryError
-XX:-OmitStackTraceInFastThrow
-XX:ReservedCodeCacheSize=512M
-XX:PerMethodRecompilationCutoff=10000
-XX:PerBytecodeRecompilationCutoff=10000
-Djdk.attach.allowAttachSelf=true
-Djdk.nio.maxCachedBufferSize=2000000

config.properties

etc 目录下创建 config.properties 文件:

$ sudo vim config.properties

在机器 trino1 写入以下内容,使 trino1 作为 coordinator:

# 该节点是否作为coordinator
coordinator=true
# coordinator是否同时作为worker节点
node-scheduler.include-coordinator=true
# http连接端口
http-server.http.port=8080
# 所有节点查询可以使用的最大内存
query.max-memory=18GB
# 单个节点查询可以使用的最大用户内存
query.max-memory-per-node=6GB
# 作为 JVM 堆中的余量/缓冲区预留内存,Trino 没有追踪
memory.heap-headroom-per-node=1GB
# 服务发现的地址
discovery.uri=http://trino1:8080

在机器 trino2、trino3 写入以下内容,使 trino2、trino3 作为 worker:

# 该节点是否作为coordinator
coordinator=false
# http连接端口
http-server.http.port=8080
# 所有节点查询可以使用的最大内存
query.max-memory=18GB
# 单个节点查询可以使用的最大用户内存
query.max-memory-per-node=6GB
# 作为 JVM 堆中的余量/缓冲区预留内存,Trino 没有追踪
memory.heap-headroom-per-node=1GB
# 服务发现的地址
discovery.uri=http://trino1:8080

log.properties

etc 目录下创建 logging.properties 文件:

$ sudo vim logging.properties

在文件内写入以下内容:

# 设置io.trino包的所有类(包括嵌套包的类, 如io.trino.spi.connector)的日志输出级别
io.trino=INFO
# 参数还可以设置为: DEBUG、ERROR
io.trino.plugin.mysql=WARN
io.trino.plugin.hive=WARN

全部配置完成后如图:

启动 Trino

启动器脚本位于安装目录下的 bin/launcher 中。

启动顺序为先启动 coordinator,再启动 worker。

  • 后台运行:

    $ bin/launcher start
  • 前台运行:

    $ bin/launcher run
  • 关闭节点:

    $ bin/launcher stop

查看Web UI

浏览器打开 http://trino1:8080

  • 用户名:trino
  • 密码:不用输入

点击登录,显示如下:

客户端部署

Trino CLI 提供了一种基于终端的交互式 shell,用于运行查询。Trino CLI 是一个自执行的 JAR 文件,这意味着它像普通 UNIX 可执行文件一样使用。执行 Trino CLI 仅依赖 Java 环境。

下载 trino-cli-371-executable.jar

$ wget https://repo1.maven.org/maven2/io/trino/trino-cli/371/trino-cli-371-executable.jar

移动到 usr/bin 目录下,并改名为 trino

$ sudo mv trino-cli-371-executable.jar /usr/bin/trino

赋予其可执行权限

$ sudo chmod +x /usr/bin/trino

使用 Trino CLI 查询 Trino 集群

$ trino --server trino1:8080