最近在研究大数据的一些组件和数据库,本来是要调研下presto怎么用的,结果发现presto因为facebook的关系,导致presto核心开发成员离开,
重新开始创建了trino,个人感觉trino发展会更好,因为他们也是为了创建一个完全开源的环境才离开facebook,没有那么多商业上的私心,会更加专注和用心经营。
trino基本上和presto一致,毕竟是核心开发是同一帮人,所以就研究下trino的使用看看。trino是2020年才创办的,时间也不是很长,相关的资料和presto相比,要少很多,基本上就是看官网和代码来尝试(不过其实看presto的资料其实也一样)。
根据官网的自己的描述,他们解释了trino不是什么,是什么,来方便读者了解trino。
statement:
query:
stage
task
task相当于是stage产生的作业,stage从coordinator被分解为一个个task,然后交给worker去执行task
split
driver
operator
exchange
部署分两种方式,一个是代码部署,另外一个是docker镜像部署。
首先按照官网指导,从官网上上把trino的代码下载下来了,trino-server-392.tar.gz,现在最新的是392的版本。下载后解压,我本地的路径是/Users/scott/software/trino-server-392
官网说DevelopmentServer是server的启动类,于是就按照官网说的下载了jdk17,以前还没用过jdk17,公司用的还是市面上使用最多的jdk8,这里稍微扯几句,
spring 最新的6.0说最低支持jdk17,我感觉这个肯定未来也是趋势,毕竟边编程语言也是不断在发展的,早点使用jdk17可以减少,后续更多的业务代码使用老的特性。
早点用新特性不香嘛。
启动的时候报错,显示最低要17.0.3,然后去官网上又看见推荐使用Azul Zulu的JDK,于是就下载了这个版本,在重新编译执行。
We recommend using Azul Zulu as the JDK for Trino, as Trino is tested against that distribution.
Zulu is also the JDK used by the Trino Docker image.
注:这一步的jdk必须装好,要不然运行trino的时候会报错,我一开始试了用jdk8,trino-cli倒是可以运行起来,但是server启动后在执行命令就狐疑报错
3.配置ulimit,这个官网只是推荐,怕limit用完了,本地测试应该不配置的话也不影响
vim /etc/security/limits.conf
然后写入参数
trino soft nofile 131072
trino hard nofile 131072
4.配置项
以下的配置项都在解压的trino文件夹里面,首先创建一个etc目录,
完整路径是/Users/scott/software/trino-server-392/etc,下面是所有配置都配置完后的目录结构图:
node.environment=production
node.id=ffffffff-ffff-ffff-ffff-ffffffffffff
node.data-dir=/var/trino/data
官方推荐配置:
-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
coordinator=true
node-scheduler.include-coordinator=false
http-server.http.port=8080
discovery.uri=http://example.net:8080
worker的最小配置项:
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
自己的本地,就把上面的example.net写为localhost或者127.0.0.1就可以了。
设置日志级别, trino的日志级别(日志依次减少):DEBUG, INFO, WARN, ERROR
io.trino=INFO
connector.name=jmx
举个栗子,我想配置其他的数据源,可以参考https://trino.io/docs/current/connector.html,下面是trino目前支持的所有数据源:
Accumulo
Atop
BigQuery
Black Hole
Cassandra
ClickHouse
Delta Lake
Druid
Elasticsearch
Google Sheets
Hive
Iceberg
JMX
Kafka
Kinesis
Kudu
Local File
MariaDB
Memory
MongoDB
MySQL
Oracle
Phoenix
Pinot
PostgreSQL
Prometheus
Redis
Redshift
SingleStore (MemSQL)
SQL Server
System
Thrift
TPCDS
TPCH
这里我再举一个mysql的配置例子:
创建etc/catalog/mysql.propertis文件,内容如下(如果运行过程中,加入的配置要重启trino才能看见)
connector.name=mysql
connection-url=jdbc:mysql://example.net:3306
connection-user=root
connection-password=secret
Started as xxxx
xxxx是端口号,还可以使用./launche status 查看当前trino的状态。
具体./launche的命令可以查看官网链接
6.使用trino-cli
从官网上下载trino-cli-392-executable.jar, 然后在本地执行
java -jar trino-cli-392-executable.jar --server localhost:8080
这里server后面的地址就是配置第4步里面配置的server的地址,能进入到trino的命令行后就大功告成。
在浏览器输入localhost:8080,输入一个账号(默认是随便输)就可以进入到trino-cli,下面是它的基本界面和执行sql后的界面。
trino的使用比较简单,使用多个异构数据库也跟使用数据库一样,只要在catalog目录里面配置好了,数据源可以连上。
就可以在trino-cli的命令行里面操作,使用。
查看所有的catalog
show catalogs;
会显示如下的catalogs(mysql和postgresql是我配置的):
trino> show catalogs;
Catalog
------------
jmx
mysql
postgresql
system
查看所有schemas
show schemas from mysql
其他的命令就不多说了,基本上和操作普通的数据库差不多,即使不知道,也可以根据cli里面的help命令,
来查看这些命令怎么使用。这里在举个栗子,是异构数据库联表查询的例子,是将mysql里面的一张表和postgresql里面的
一张表联表查询,这个还是比较厉害的。写法还是跟普通的join差不多,如图: