Trino Docker 部署

Trino需要JDK 17+,所以常用JDK 8的在Docker上体验一把也未尝不可

Docker 基本体验

# 启动Trino
docker run -d -p 8080:8080 --name trinodb trinodb/trino:380

# 连接Trino
docker exec -it trinodb trino --catalog tpch --schema sf1
## 第一个trino 是docker run 时设置的--name
## Presto/Trino 分三层,catalog.schema.table,例如 hive.xxxDB.xxxTable
## Presto/Trino 就是通过Catalog 实现跨库查询的,例如跨越 MySQL 和Oracle

# 测试Trino
## 查看有哪些Catalog
trino:sf1> show catalogs;
## 提示符中的sf1 表示当前的Schema
trino:sf1> show schemas;
## 列出当前Schema 中的Table
trino:sf1> show tables;
## 简单测试SQL 语句
trino:sf1> select count(*) from nation;
## 查看帮助文档
trino:sf1> help

# https://github.com/trinodb/trino
## Run a query to see the nodes in the cluster:
SELECT * FROM system.runtime.nodes;

## Run a query against the TPCH connector:
SELECT * FROM tpch.tiny.region;

Docker 定制连接

需求:使用Trino访问Hive的数据库,参考Hive系列/Hive3 单机版(含Derby 多用户).md

# 0. 前期准备
## 0.1 macOS 上设置Docker 的Preferences --> Resources --> File Sharing 加上`/opt/modules`
### 英文Hive/SparkSQL 的元数据和数据都存储在该路径的某个目录下,为了下面Docker 映射成功必须加上
## 0.2 开启Derby 数据库网络模式,用其代替MySQL,存储Hive 的元数据
cd /opt/modules/derby-10.14.2.0 && bin/startNetworkServer -h 0.0.0.0
## 0.3 开启Hive 的MetaStore 服务,Trino 通过该服务获取Hive/SparkSQL 的元数据信息
cd /opt/modules/hive-3.1.3 && bin/hive --service metastore

# 1. 创建Trino 的连接配置文件
mkdir -p /opt/modules/trino/catalog
## 配置中指向Hive 的MetaStore 服务
cat > /opt/modules/trino/catalog/hive.properties << 'EOF'
connector.name=hive
hive.metastore.uri=thrift://host.docker.internal:9083
EOF
## 其中host.docker.internal 表示Docker 所在的宿主机

# 2. 启动Docker Trino 镜像
docker run \
  -v /opt/modules:/opt/modules \
  -v /opt/modules/trino/catalog/hive.properties:/etc/trino/catalog/hive1.properties \
  -d --name trinodb -p 8080:8080 trinodb/trino:380
## /etc/trino/catalog/hive1.properties 将会使Trino 产生名为`hive1`的Catalog
## 映射成文件这样就能保留住Trino 镜像中原有的示例数据,这些示例可用于测试和验证服务
## -v /opt/modules:/opt/modules 将数据文件映射到容器中,否则无法被容器内Trino 程序查询
## 实际数据存储在宿主机的`/opt/modules/derby-10.14.2.0/data/hive_warehouse`里

# 3. 启动Trino 客户端
docker exec -it trinodb trino

# 4. 验证和查询Hive 数据库
## 4.1 查询有哪些Catalog
show catalogs;
### 可查到有个名为`hive1`的Catalog
## 4.2 查询某个Catalog 下有哪些Schema 即Database
show schemas from hive1;
## 4.3 切换到hive1.testdb 数据
use hive1.testdb;
## 4.4 查询当前数据库有哪些表
show tables;
## 4.5 查询表的数据
select * from testdb.tb2;
select count(*) from tb2 where id > 0;

# 5. 示例数据
select count(*) from tpch.sf1.nation;
SELECT count(*) FROM tpch.tiny.nation;

参考资料

Trino in containers
Hive connector
Presto/Trino的优点和使用场景、使用Docker体验Presto/Trino

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐