目录
一、安装配置
1、环境要求
注意presto对jdk等版本有要求,具体看官方文档上对应要求,目前最新版为359,要求如下:
(1)jdk11.0.11到12版本之间
(2)python 2.6.x, 2.7.x, or 3.x
2、下载
官网下载包 https://trino.io/download.html
#解压,解压路径为/usr/install/trino-server-359
tar -zxvf trino-server-359.tar.gz
#进入trino-server-359 创建etc目录
cd trino-server-359
mkdir etc
3、文件配置
#创建node.properties
cd etc
vim node.properties
#node.properties文件内容
#环境名称
node.environment=production
#节点id,如果是集群,每台机器的id都必须唯一不一样
node.id=presto-0652
#数据目录
node.data-dir=/usr/install/trino-server-359/data
#创建etc/jvm.config文件
vim jvm.config
#jvm.config文件内容
-server
-Xmx32G
-XX:-UseBiasedLocking
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+ExplicitGCInvokesConcurrent
-XX:+ExitOnOutOfMemoryError
-XX:+HeapDumpOnOutOfMemoryError
-XX:ReservedCodeCacheSize=512M
-Djdk.attach.allowAttachSelf=true
-Djdk.nio.maxCachedBufferSize=2000000
#创建/trino-server-359/etc/config.properties
vim config.properties
#config.properties文件内容
#如果是master节点则设置为true,worker节点设置false
coordinator=true
#master节点是否允许调度,如果是单机版,因为只有一台机器,设置为true,集群则master节点设置false
node-scheduler.include-coordinator=true
#http端口
http-server.http.port=8080
#单个查询在集群的最大内存
query.max-memory=16GB
#单个查询在单个节点上的最大用户内存
query.max-memory-per-node=8GB
#单个查询在单个节点上的最大用户和系统内存
query.max-total-memory-per-node=12GB
#发现服务的uri,端口必须跟http-server.http.port一样
discovery.uri=http://192.168.6.52:8080
#最大执行时间,不是必须可不设置
query.max-run-time=600s
#开启web ui界面
web-ui.enabled=true
#创建/trino-server-359/etc/log.properties
vim /log.properties
#log.properties文件内容
#最低级别INFO,还有DEBUG,INFO,WARN,ERROR
io.trino=INFO
#配置catalog
mkdir /usr/install/trino-server-359/etc/catalog
# 创建/trino-server-359/etc/catalog/jmx.properties
vim jmx.properties
#jmx.properties文件内容
connector.name=jmx
#启动服务,日志查看在node.properties文件配置的node.data-dir参数目录/var/log下
cd /trino-server-359/bin
./launcher start
#启动,该命令可以看见日志
./launcher run
#启动,该命令后台启动
./launcher start
#终止
./launcher stop
#重启
./launcher restart
4、访问web ui
默认账号:admin,无密码
看到以下页面说明启动成功
二、安装客户端
cd /trino-server-359
wget https://repo1.maven.org/maven2/io/trino/trino-cli/359/trino-cli-359-executable.jar
mv trino-cli-359-executable.jar trino
chmod +x trino
#连接presto,8080端口跟config.properties配置文件中端口对应
./trino --server localhost:8080 --catalog jmx
能够看见如下图所示,说明连接成功
三、安全设置(http连接,密码文件方式)
1、参数设置
#修改/presto-server-337/etc/config.properties,追加如下内容
http-server.authentication.type=PASSWORD#创建etc/password-authenticator.properties,内容如下
password-authenticator.name=file file.password-file=/usr/install/trino-server-359/etc/password.db
password-authenticator.properties文件参数说明
参数 | 描述 |
---|---|
| password文件路径 |
| 多久加载密码文件,默认 |
| 缓存密码的最大数量,默认 |
#创建etc/password.db
touch password.db#创建名为trino的用户,并设置密码
htpasswd -B -C 10 password.db trino
这样说明创建成功
2、代码连接测试
<dependency> <groupId>io.trino</groupId> <artifactId>trino-jdbc</artifactId> <version>359</version> </dependency>
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
public class JdbcClient {
public static void main(String[] args) throws SQLException, ClassNotFoundException {
Class.forName("io.trino.jdbc.TrinoDriver");
String url = "jdbc:trino://192.168.6.52:8080";
Properties properties = new Properties();
properties.setProperty("user", "trino");
properties.setProperty("password", "trino2021");
properties.setProperty("SSL", "true");
Connection connection = DriverManager.getConnection(url, properties);
//能打印connection说明连接正常
System.out.println(connection);
if (connection != null) {
connection.close();
}
}
}
PS:Trino原名prestoSql,因为被Facebook抢先注册商标所以改名,prestoSql和trino JDBC连接的驱动是不一样的,其他的配置都差不多。
四、配置catalog
解释:catalog可以理解成是不同的数据源,一个catalog就是一个数据源连接
示例:新增一个mysql类型的catalog
在/trino-server-359/etc/calalog目录下新建test_db.properties文件
文件内容如下
connector.name=test_db
connection-url=jdbc:mysql://10.58.11.15:3306?useSSL=false&useUnicode=true&characterEncoding=UTF-8
connection-user=username
connection-password=password
配置完后重启presto生效
不同类型数据源可以参考官网:https://trino.io/docs/current/connector.html
五、参数调优
presto内存分为系统内存和用户内存,系统内存用于input/output/exchange buffers等,用户内存用于hash join、agg等
参数 | 默认值 | 调优值 | 参数说明 | 所在文件 |
query.max-memory-per-node | jvm*0.1 | jvm*0.25 | 单个查询在单个节点上的最大用户内存 jvm为jvm.config文件中的Xmx大小,0.25的参数可以根据实际情况调整,如需要并发度比较高的情况,该参数可以设置小一点;遇到单个查询需要内存比较大的情况,可设置大点 | config.properties |
query.max-total-memory-per-node | jvm*0.3 | query.max-memory-per-node * 1.2 | 单个查询在单个节点上的最大用户和系统内存 必须大于query.max-memory-per-node | config.properties |
query.max-memory | 20G | workers * query.max-memory-per-node | 单个查询在集群的最大用户内存 | config.properties |
query.max-total-memory | query.max-memory*2 | workers * query.max-total-memory-per-node | 单个查询在集群的最大用户和系统内存 必须大于query.max-memory | |
memory.heap-headroom-per-node | jvm*0.3 | memory.heap-headroom-per-node < JVM Xmx - query.max-total-memory-per-node | 主要是第三方库的内存分配 官网原文:This is the amount of memory set aside as headroom/buffer in the JVM heap for allocations that are not tracked by Trino. | |
query.max-execution-time | 100天 | 根据实际需要设置 | 允许在集群上执行的最大时间,执行时间不包括分析、查询计划或队列中的等待时间 | config.properties |
query.max-planning-time | 10分钟 | 根据实际需要设置 | 允许在集群上计划执行的最大时间 | config.properties |
query.max-run-time | 100天 | 根据实际需要设置 | 在集群上处理的最大时间,包括分析、时间、排队等待的时间 | config.properties |
query.max-stage-count | 100 | 每个查询允许的最大stage数 | config.properties | |
query.max-history | 100 | 最大查询历史 | config.properties | |
query.min-expire-age | 15分钟 | config.properties | ||
query.low-memory-killer.policy | total-reservation-on-blocked-nodes | Kill策略,杀掉Blocked的最大查询,GENERAL_POOL满了,防止OOM | config.properties | |
| 物理内存*0.7 | jvm最大内存 | jvm.config |