【部署】Deploying Trino on linux

2023-12-04 18:44
文章标签 linux 部署 trino deploying

本文主要是介绍【部署】Deploying Trino on linux,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一. Requirements
    • 1. Linux operating system
    • 2. Java 环境
    • 3. Python
  • 二. Installing Trino
  • 三. Configuring Trino
    • 1. 节点配置
    • 2. JVM 配置
    • 3. Config properties
    • 4. Log levels
    • 5. Catalog properties
  • 四. Running Trino

一. Requirements

1. Linux operating system

  • 64位

  • 资源限制配置:/etc/security/limits.conf

trino soft nofile 131072
trino hard nofile 131072
trino soft nproc 128000
trino hard nproc 128000

 

2. Java 环境

最新的Trino版本需要Java的长期支持版本Java 17,特别是17.0.3或更新版本。Trino不支持更旧版本的Java,而在新版本的Java(Java 18 或 19)环境下它也许可以正常工作,但并未仔细测试。

下载安装JDK17:Linux系统下JDK17安装+环境配置

 
如果使用java17或者java18,需要配置charset为UTF-8,在etc/jvm.config

-Dfile.encoding=UTF-8 

java19不要配置

 

3. Python

version 2.6.x, 2.7.x, or 3.x
required by the bin/launcher script only

 
 

二. Installing Trino

下载地址:trino-server-434.tar.gz,

解压:tar -zxvf trino-server-434.tar.gz

trino需要数据目录来存储日志等。推荐将数据目录放在安装目录之外,便于Trino的更新。

 

三. Configuring Trino

在安装目录创建一个etc目录,此目录下有如下配置:

  • 节点配置:每个节点的环境配置。
  • JVM配置
  • Trino server配置
  • catalog配置:配置数据源

1. 节点配置

创建etc/node.properties文件,这里配置每个节点。一个节点代表一个trion的安装实例。当trino第一次安装时,有如下最小化配置:

node.environment=production
node.id=ffffffff-ffff-ffff-ffff-ffffffffffff
node.data-dir=/var/trino/data
  • node.environment:环境名字。所有的Trino节点都必须有同样的环境名字。名字开头必须小写,且只包含小写字母或_字符。
  • node.id :trion唯一标识,每个节点都不同。此标识在更新或者重启Trion时要保持不动。如果多个trino实例跑在同一个节点,每个安装实例必须有唯一标识。标识从一个字母开始,标识中只包含字母、- 或 _字符。
  • node.data-dir:数据目录位置,trion存储日志和其他数据在此目录。

 

2. JVM 配置

创建etc/jvm.config文件,这里包含一些启动java虚拟机的一些命令。文件格式是每行一个option组成的列表。

这些配置不由shell执行,所以文件中的空格或其他特殊字符不能用引号括起。如下参考:

-server
-Xmx10G
-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
-Dfile.encoding=UTF-8
# Reduce starvation of threads by GClocker, recommend to set about the number of cpu cores (JDK-8192647)
-XX:+UnlockDiagnosticVMOptions
-XX:GCLockerRetryAllocationCount=32

根据节点情况调整-Xmx配置,一般推荐设为节点总内存的70%-85%。比如所有的workers和coordinator使用64G的RAM,则你可以设置-Xmx54G

  • 分配的内存中大部分用于处理,小部分用于比如JVM的内部操作,比如垃圾回收。
  • 其他可用节点的内存必须足够用于系统操作、其他正在运行的服务,以及native code对堆外内存的使用。
  • 在较大节点上,内存比可以更小,不支持分配所有内存给JVM或者使用交换内存,不使用交换内存是比较推荐的。
  • 对于生产场景下,大于32GB的内存是比较推荐的。
  • 因为OutOfMemoryError通常会使JVM处于不一致的状态,所以我们写一个heap dump,用于调试,并在发生这种情况时强制终止进程。
  • JVM必须能够在临时目录下执行,在某些安装中,默认的/tmp目录被用作挂载标志,而这导致Trino启动不了。当然可以设置:-Djava.io.tmpdir=/path/to/other/tmpdir 来覆盖默认值。
  • 这里设置GCLocker retry allocation count (-XX:GCLockerRetryAllocationCount=32)来避免太早的OOM(JDK-8192647)

 

3. Config properties

创建etc/config.properties,用于配置Trino Server。每一个Trino server都可以有coordinator和worker两种身份。一个集群需要一个coordinator,将一台机器专门用于执行协调工作可以给大型集群提供最佳性能,对于集群拓展和MPP并行处理则由worker实现。

coordinator的最小化配置:

coordinator=true
node-scheduler.include-coordinator=false
http-server.http.port=8080
discovery.uri=http://example.net:8080

workers的最小化配置:

coordinator=false
http-server.http.port=8080
discovery.uri=http://example.net:8080

如果部署一个测试集群,coordinator 和 worker部署到一起,则可以配置:

coordinator=true
node-scheduler.include-coordinator=true
http-server.http.port=8080
discovery.uri=http://example.net:8080

配置说明:

  • coordinator:配置为true则设置此trino实例作为coordinator,用来接收客户端的查询请求,以及管理查询。
  • node-scheduler.include-coordinator:允许coordinator工作调度。对于更大的集群,coordinator的工作处理影响查询性能,因为机器的资源不能用于重要任务的调度,管理以及监控查询的执行。
  • http-server.http.port:http server端口,Trino使用http协议进行所有内外部的通讯。(没有RPC端口?)
  • discovery.uri:coordinator具备服务发现的能力。每个trino实例在启动时都会向发现服务注册自己,并持续的汇报心跳。发现服务分享http服务,所以使用同样的端口。如果coordinator上禁用了http,那么需要使用HTTPS。

以上是最小化配置说明。其他配置见:

All additional configuration is optional and varies widely based on the specific cluster and supported use cases. The Administration and Security sections contain documentation for many aspects, including Resource groups for configuring queuing policies and Fault-tolerant execution.

 

4. Log levels

创建etc/log.properties,来设置最小日志级别。每一个logger通过类的全限定名声明。如下设置日志级别:

io.trino=INFO

这会给io.trino.serverio.trino.plugin.hive 设置INFO的日志级别。不过默认的日志级别就是INFO,这里有四种日志级别:DEBUG, INFO, WARN and ERROR。

 

5. Catalog properties

Trino通过连接器访问数据,而连接器挂载到Catalog中。连接器向Catalog提供所有的schemas和表。例如:hive连接器映射每一个hive数据库为一个schema。如果hive连接器挂载为hive catalog,在hive.web.clicks页面上就可以访问hive表。

通过在etc/catalog目录下创建一个catalog配置文件来注册Catalogs。如果创建etc/catalog/jmx.properties,就会将jmx挂载到catalog中

connector.name=jmx

其他连接器配置见:Connectors

 

四. Running Trino

bin/launcher中提供了启动脚本,脚本可以被手动操作,或作为一个daemon执行。有如下命令:

命令说明
run前台启动,使用Ctrl+C关闭,或者在其他终端执行stop
start启动作为一个daemon,并返回PID
stop关闭服务
restart重启或启动一个服务,绑定一个新的PID
kill关闭可能挂起的服务
status打印状态,Stopped pid or Running as pid.
bin/launcher start

或者,它可以在前台运行,将日志和其他输出写入stdout/stderr。如果使用像daemontools这样的监控系统,两个流都应该被捕获:

bin/launcher run

launcher为etc目录、配置文件、数据目录var和数据目录中的日志文件配置默认值。
可以按需修改,例如使用安装目录之外的目录、特定的挂载点或位置,甚至使用其他文件名。例如,Trino RPM调整使用的目录以更好地遵循Linux文件系统层次标准(FHS)。

 
在这里插入图片描述

登录时需要写用户可以随便写,不需要输入密码

当trino启动后,可以在数据目录查看如下日志:

  • launcher.log:由launcher创建,包含stdout and stderr streams。server logging的初始化、JVM的错误以及分析会写到launcher.log中。
  • server.log:Trino主要日志,当sever初始化失败时会包含一些相关信息。日志会自动轮转和压缩。
  • http-request.log:记录所有http请求。日志同样会自动轮转和压缩。

 

参考:
官网:Trino Deploying

这篇关于【部署】Deploying Trino on linux的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/454517

相关文章

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

Nginx部署HTTP/3的实现步骤

《Nginx部署HTTP/3的实现步骤》本文介绍了在Nginx中部署HTTP/3的详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前提条件第一步:安装必要的依赖库第二步:获取并构建 BoringSSL第三步:获取 Nginx

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境

Linux搭建ftp服务器的步骤

《Linux搭建ftp服务器的步骤》本文给大家分享Linux搭建ftp服务器的步骤,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录ftp搭建1:下载vsftpd工具2:下载客户端工具3:进入配置文件目录vsftpd.conf配置文件4:

Linux实现查看某一端口是否开放

《Linux实现查看某一端口是否开放》文章介绍了三种检查端口6379是否开放的方法:通过lsof查看进程占用,用netstat区分TCP/UDP监听状态,以及用telnet测试远程连接可达性... 目录1、使用lsof 命令来查看端口是否开放2、使用netstat 命令来查看端口是否开放3、使用telnet

Linux系统管理与进程任务管理方式

《Linux系统管理与进程任务管理方式》本文系统讲解Linux管理核心技能,涵盖引导流程、服务控制(Systemd与GRUB2)、进程管理(前台/后台运行、工具使用)、计划任务(at/cron)及常用... 目录引言一、linux系统引导过程与服务控制1.1 系统引导的五个关键阶段1.2 GRUB2的进化优