二、Trino406系列 之 集群部署
文章目录
- 需要条件
- linux操作系统
- Java runtime environment
- Python
- 安装Trino
- 配置Trino
- node.properties
- jvm.config
- Disable Preventive GC for performance reasons (JDK-8293861)
- config.properties
- 日志级别
- Catalog properties
- Running Trino
- launcher commands
- 启动客户端
- 常用查询命令
- 感谢
Trino服务可以安装和部署在许多不同的平台上。通常,您使用一个coordinator和许多worker运行一个机器集群。您可以在以下部分中找到部署这样一个集群的说明和相关信息:
一旦您完成了部署,或者您已经访问了一个正在运行的集群,您就可以继续配置您的客户端应用程序。
需要条件
linux操作系统
- 64-bit必要条件
- 首选更新的版本,特别是运行在容器中
- 为运行Trino进程的用户设置足够的ulimit。这些限制可能取决于您使用的特定Linux发行版。特定Trino实例需要打开的文件描述符的数量大致等于集群中的机器数量,乘以取决于工作负载的某个因素。我们推荐以下限制,通常可以在/etc/security/limits.conf中设置:
trino soft nofile 131072
trino hard nofile 131072
Java runtime environment
Trino需要64位版本的Java 17,最低要求版本为17.0.3。早期的主要版本,如Java 8或Java 11不能工作。较新的主要版本,如Java 18或19,不受支持-它们可能工作,但没有经过测试。
我们建议使用Azul Zulu作为Trino的JDK,因为Trino是针对该发行版进行测试的。Zulu也是Trino Docker镜像使用的JDK。
Python
- version 2.6.x, 2.7.x, or 3.x
- required by the bin/launcher script only
安装Trino
下载Trino服务器tarball, Trino -server-406.tar.gz,并解压缩它。tarball包含一个顶级目录trino-server-406,我们称之为安装目录。
Trino需要一个数据目录来存储日志等等。我们建议在安装目录之外创建一个数据目录,这样可以在升级Trino时方便地保存它。
配置Trino
在安装目录中创建一个etc目录。它包含以下配置:
- 节点属性:特定于每个节点的环境配置
- JVM配置:Java虚拟机的命令行选项
- Config Properties: Trino服务器的配置。有关可用的配置属性,请参阅Properties参考。
- 目录属性:连接器(数据源)的配置。连接器可用的目录配置属性在各自的连接器文档中进行了描述。
node.properties
节点属性文件,etc/node。属性,包含特定于每个节点的配置。节点是机器上安装的Trino的单个实例。这个文件通常是部署系统在第一次安装Trino时创建的。下面是一个极小的etc/node.properties:
node.environment=production
node.id=ffffffff-ffff-ffff-ffff-ffffffffffff
node.data-dir=/var/trino/data
上面提到属性解释:
node.environment:环境的名称。集群中的所有Trino节点必须具有相同的环境名称。名称必须以小写字母数字开头,且只能包含小写字母数字或下划线。
node.id:此Trino安装的唯一标识符。这对于每个节点都必须是唯一的。这个标识符应该在重新启动或升级Trino时保持一致。如果在一台机器上运行多个Trino安装(即同一台机器上的多个节点),则每个安装必须具有唯一标识符。标识符必须以字母数字开头,且只能包含字母数字、“-”或“_”。
node.data-dir:数据目录的位置(文件系统路径)。Trino在这里存储日志和其他数据。
jvm.config
JVM配置文件etc/ jvm. config,包含用于启动Java虚拟机的命令行选项列表。文件的格式是一个选项列表,每行一个。shell不会解释这些选项,因此包含空格或其他特殊字符的选项不应该被引用。
下面为创建etc/jvm.config提供了一个很好的起点:
-server
-Xmx16G
-XX:InitialRAMPercentage=80
-XX:MaxRAMPercentage=80
-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
-XX:+UnlockDiagnosticVMOptions
-XX:+UseAESCTRIntrinsics
Disable Preventive GC for performance reasons (JDK-8293861)
-XX:-G1UsePreventiveGC
由于OutOfMemoryError通常会使JVM处于不一致的状态,因此我们编写一个堆转储以进行调试,并在发生这种情况时强制终止进程。
JVM使用的临时目录必须允许执行代码。具体来说,挂载不能设置noexec标志。在某些安装中,默认的/tmp目录是用这个标志挂载的,这会阻止Trino启动。您可以通过添加-Djava.io覆盖临时目录来解决这个问题。tmpdir=/path/to/other/tmpdir到JVM选项列表。
我们启用-XX:+UnlockDiagnosticVMOptions和-XX:+ useaesctrintrinsic来提高S3的AES性能,等ARM64 (JDK-8271567)我们禁用预防性GC (-XX:-G1UsePreventiveGC)出于性能原因(参见JDK-8293861)
config.properties
配置属性文件etc/config。包含Trino server的配置。每个Trino server都可以同时充当协调器和工作器。一个集群需要包含一个协调器,将一台机器专门用于执行协调工作,可以在较大的集群上提供最佳性能。缩放和并行化是通过使用许多worker来实现的。
以下是协调器的最小配置:
coordinator=true
node-scheduler.include-coordinator=false
http-server.http.port=8080
discovery.uri=http://example.net:8080
下面是wokers节点的最小化配置
coordinator=false
http-server.http.port=8080
discovery.uri=http://example.net:8080
或者,如果您正在设置一台用于测试的机器,它同时充当协调器和工作器,请使用以下配置:
coordinator=true
node-scheduler.include-coordinator=true
http-server.http.port=8080
discovery.uri=http://example.net:8080
自己的本地,就把上面的example.net写为localhost或者127.0.0.1就可以了。
这些属性需要一些解释:
coordinator:允许这个Trino实例充当协调器,以便接受来自客户端的查询并管理查询执行。
node-scheduler.include-coordinator:允许在协调器上调度工作。对于较大的集群,协调器上的处理工作可能会影响查询性能,因为机器的资源无法用于调度、管理和监视查询执行等关键任务。
http-server.http.port: HTTP服务器的端口。Trino使用HTTP进行所有内部和外部通信。
discover.uri: Trino协调器有一个发现服务,所有节点都使用它来相互查找。每个Trino实例都在启动时向发现服务注册自己,并不断心跳以保持其注册活动。发现服务与Trino共享HTTP服务器,因此使用相同的端口。替换example.net:8080以匹配Trino协调器的主机和端口。如果在协调器上禁用了HTTP,则URI方案必须是https,而不是HTTP。
上面的配置属性是帮助您入门的一个最小集合。所有附加配置都是可选的,并且根据特定的集群和支持的用例而有很大差异。管理和安全部分包含许多方面的文档,包括用于配置队列策略和容错执行的资源组。
属性参考提供了支持的主题属性的全面列表,这些主题包括常规属性、资源管理属性、查询管理属性、Web UI属性等。
日志级别
可选的日志级别文件,etc/log。允许为指定的日志记录器层次结构设置最小日志级别。每个记录器都有一个名称,该名称通常是使用该记录器的类的完全限定名。记录器有一个基于名称中的圆点的层次结构,就像Java包一样。例如,考虑以下日志级别文件:
io.trino=INFO
这将把io.trino.server和io.trino.plugin.hive的最低级别设置为INFO。默认的最小级别是INFO,因此上面的例子实际上没有改变任何东西。有四个级别:DEBUG、INFO、WARN和ERROR。
Catalog properties
Trino通过连接器访问数据,这些连接器安装在目录中。连接器提供catalog中的所有schema和table。例如,Hive连接器将每个Hive数据库映射到一个schema。如果Hive连接器被挂载为Hive catalog,并且Hive在数据库web中包含一个表单击,则可以在Trino中以Hive .web.clicks的形式访问该表。
通过在etc/catalog目录中创建目录属性文件来注册目录。例如,创建“etc/catalog/jmx.properties”。使用以下内容将JMX连接器挂载为JMX目录
connector.name=jmx
有关配置连接器(https://trino.io/docs/current/connector.html)的更多信息,请参阅连接器。
Running Trino
安装提供了一个bin/launcher脚本,需要在PATH中使用Python。该脚本可以手动使用,也可以作为守护进程启动脚本使用。它接受以下命令:
launcher commands
run: 在前台启动server并让其运行。要关闭server,请在此终端使用Ctrl+C或在其他终端使用stop命令。
start:启动server作为守护进程,并返回其进程ID。
stop:关闭以start或run启动的server。发送SIGTERM信号。
restart:停止,然后重新启动一个正在运行的server,或者启动一个停止的server,分配一个新的进程ID。
kill:通过发送SIGKILL信号关闭可能挂起的server。
status:打印状态行,停止pid或运行为pid。
许多其他选项允许您指定配置文件和目录位置,以及Java选项。使用–help运行启动程序以查看受支持的命令和命令行选项。
每个命令的-v或–verbose选项将服务器的当前设置放在命令的常规输出之前。
Trino可以通过运行以下命令作为守护进程启动:
bin/launcher start
或者,它可以在前台运行,将日志和其他输出写入stdout/stderr。如果使用像daemontools这样的监督系统,两个流都应该被捕获:
bin/launcher run
启动器为配置目录etc、配置文件、数据目录var和数据目录中的日志文件配置默认值。您可以更改这些值来调整您的Trino使用以满足任何需求,例如使用安装目录之外的目录、特定的挂载点或位置,甚至使用其他文件名。例如,Trino RPM调整使用的目录,以更好地遵循Linux文件系统层次标准(FHS)。
启动Trino后,你可以在data目录var中的log目录中找到日志文件:
launcher.log:该日志由启动程序创建,连接到server的stdout和stderr流。它包含初始化server日志时发生的一些日志消息,以及JVM产生的任何错误或诊断。
server.log:这是Trino使用的主要日志文件。如果服务器在server过程中失败,它通常包含相关信息。它是自动旋转和压缩。
http-request.log:这是HTTP请求日志,包含服务器接收到的每个HTTP请求。它是自动旋转和压缩。
启动客户端
需要下载client包https://repo1.maven.org/maven2/io/trino/trino-cli/
然后将该jar包上传到客户端机器上,执行命令
java -jar trino-cli-406-executable.jar --server localhost:8080
会弹出trino控制台,即可输入查询语句
常用查询命令
show catalogs; // 查询有哪些catalog,比如jmx,hive,mysql等存储介质
show schemas from jmx; // 查询jmx里面有哪些schemas,如下图
感谢
《Trino的介绍和安装使用》https://juejin.cn/post/7129151816512012302
Trino官网 https://trino.io/docs/407/installation.html