本系列主要会记录笔者在学习和使用 Presto 过程中学习记录及所遇到的问题和解决的方法,会不定期更新,同时也欢迎各位同鞋在文末留言一起探讨使用心得~
在 Presto 系列之(一)初识 Presto 一篇我们大概介绍了 Presto 的架构和 Presto 特点及其查询的拆分执行,在本篇我们实操下 Presto 的部署安装。
安装部署
笔者的安装环境为:
- Centos 7
- jdk 11 (从 presto 332 开始需要使用 jdk11,可不设置环境变量,可在 presto 启动脚本中单独指定 )
- maven 3.6.2 (用于源码编译,如果源码在本地编译,服务器上可不安装)
- Python 2.7.5 (主要用于执行启动脚本)
安装包获取
自行编译
- 源码下载
# prestosql 已更名为trino所以github,目前显示为trino项目
git clone https://github.com/trinodb/trino.git
- 切换分支
trino 项目在分支中没有 333 版本,所有历史版本 及333 版本可在 git tag 中找到;对于分支切换我们可以使用
git checkout 333
- 编译
git clean package -DskipTests
# build 成功输出
[INFO] Reactor Summary for presto-root 333:
[INFO]
[INFO] presto-root ........................................ SUCCESS [ 5.354 s]
[INFO] presto-spi ......................................... SUCCESS [ 44.148 s]
[INFO] presto-plugin-toolkit .............................. SUCCESS [ 3.162 s]
[INFO] presto-client ...................................... SUCCESS [02:24 min]
[INFO] presto-parser ...................................... SUCCESS [ 8.072 s]
[INFO] presto-geospatial-toolkit .......................... SUCCESS [ 3.979 s]
[INFO] presto-array ....................................... SUCCESS [ 3.247 s]
[INFO] presto-matching .................................... SUCCESS [ 2.860 s]
[INFO] presto-memory-context .............................. SUCCESS [ 2.347 s]
[INFO] presto-tpch ........................................ SUCCESS [ 17.717 s]
[INFO] presto-main ........................................ SUCCESS [01:01 min]
[INFO] presto-testing ..................................... SUCCESS [ 45.051 s]
[INFO] presto-atop ........................................ SUCCESS [ 12.530 s]
[INFO] presto-jmx ......................................... SUCCESS [ 11.328 s]
[INFO] presto-record-decoder .............................. SUCCESS [ 33.075 s]
[INFO] presto-kafka ....................................... SUCCESS [ 5.059 s]
[INFO] presto-kinesis ..................................... SUCCESS [ 5.272 s]
[INFO] presto-redis ....................................... SUCCESS [ 35.216 s]
[INFO] presto-accumulo .................................... SUCCESS [ 10.508 s]
[INFO] presto-cassandra ................................... SUCCESS [ 25.711 s]
[INFO] presto-blackhole ................................... SUCCESS [ 2.496 s]
[INFO] presto-memory ...................................... SUCCESS [ 3.140 s]
[INFO] presto-noop ........................................ SUCCESS [ 2.222 s]
[INFO] presto-orc ......................................... SUCCESS [ 8.780 s]
[INFO] presto-benchmark ................................... SUCCESS [ 5.958 s]
[INFO] presto-parquet ..................................... SUCCESS [ 5.316 s]
[INFO] presto-rcfile ...................................... SUCCESS [ 3.715 s]
[INFO] presto-hive ........................................ SUCCESS [ 16.059 s]
[INFO] presto-hive-hadoop2 ................................ SUCCESS [ 11.766 s]
[INFO] presto-teradata-functions .......................... SUCCESS [ 32.888 s]
[INFO] presto-example-http ................................ SUCCESS [ 3.012 s]
[INFO] presto-local-file .................................. SUCCESS [ 2.841 s]
[INFO] presto-tpcds ....................................... SUCCESS [ 2.872 s]
[INFO] presto-raptor-legacy ............................... SUCCESS [ 42.069 s]
[INFO] presto-base-jdbc ................................... SUCCESS [ 33.162 s]
[INFO] presto-mysql ....................................... SUCCESS [ 3.121 s]
[INFO] presto-memsql ...................................... SUCCESS [ 2.879 s]
[INFO] presto-phoenix ..................................... SUCCESS [ 44.259 s]
[INFO] presto-postgresql .................................. SUCCESS [ 33.842 s]
[INFO] presto-redshift .................................... SUCCESS [ 2.802 s]
[INFO] presto-sqlserver ................................... SUCCESS [ 3.160 s]
[INFO] presto-mongodb ..................................... SUCCESS [ 34.876 s]
[INFO] presto-ml .......................................... SUCCESS [ 3.812 s]
[INFO] presto-geospatial .................................. SUCCESS [ 6.600 s]
[INFO] presto-resource-group-managers ..................... SUCCESS [ 33.778 s]
[INFO] presto-tests ....................................... SUCCESS [ 4.950 s]
[INFO] presto-jdbc ........................................ SUCCESS [ 10.091 s]
[INFO] presto-cli ......................................... SUCCESS [ 34.214 s]
[INFO] presto-product-tests ............................... SUCCESS [ 32.265 s]
[INFO] presto-product-tests-launcher ...................... SUCCESS [ 35.340 s]
[INFO] presto-benchmark-driver ............................ SUCCESS [ 3.585 s]
[INFO] presto-elasticsearch ............................... SUCCESS [ 36.685 s]
[INFO] presto-password-authenticators ..................... SUCCESS [ 2.472 s]
[INFO] presto-google-sheets ............................... SUCCESS [ 3.347 s]
[INFO] presto-thrift-api .................................. SUCCESS [ 32.683 s]
[INFO] presto-thrift-testing-server ....................... SUCCESS [ 8.197 s]
[INFO] presto-thrift ...................................... SUCCESS [01:48 min]
[INFO] presto-kudu ........................................ SUCCESS [ 36.978 s]
[INFO] presto-iceberg ..................................... SUCCESS [ 14.493 s]
[INFO] presto-bigquery .................................... SUCCESS [ 36.784 s]
[INFO] presto-session-property-managers ................... SUCCESS [ 3.350 s]
[INFO] presto-server ...................................... SUCCESS [03:00 min]
[INFO] presto-server-rpm .................................. SUCCESS [01:58 min]
[INFO] presto-docs ........................................ SUCCESS [02:04 min]
[INFO] presto-verifier .................................... SUCCESS [ 38.854 s]
[INFO] presto-testing-server-launcher ..................... SUCCESS [ 16.297 s]
[INFO] presto-benchto-benchmarks .......................... SUCCESS [ 37.568 s]
[INFO] presto-proxy ....................................... SUCCESS [ 5.086 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 29:14 min
[INFO] Finished at: 2021-06-15T17:04:25+08:00
[INFO] ------------------------------------------------------------------------
编译成功后在 presto-server 的 target 目录下可以找到服务压缩包presto-server-333.tar.gz

同样的在 presto-server 的 target 目录下可以找到客户端的 jar 包 presto-cli-333-executable.jar

Github 下载
https://github.com/trinodb/trino/tags?after=341
https://github.com/trinodb/trino/archive/refs/tags/333.tar.gz
部署
注意如果是多节点 请保证 coordinator 节点和 worker 节点之间可以免密登录
解压
将 presto-server-333.tar.gz 上传至服务器,解压缩:
tar -zxvf presto-server-333.tar.gz
创建配置文件
config.properties
Presto 服务配置文件
# 创建
touch config.properties
# 当节点为 Coordinator 时 config.properties 内容如下:
coordinator=true
node-scheduler.include-coordinator=true
http-server.http.port=8080
query.max-memory=50GB
query.max-memory-per-node=1GB
query.max-total-memory-per-node=2GB
discovery-server.enabled=true
discovery.uri=http://192.168.4.54:8080
# 当节点为 Worker 时 config.properties 内容如下:
coordinator=false
http-server.http.port=8080
query.max-memory=50GB
query.max-memory-per-node=1GB
query.max-total-memory-per-node=2GB
discovery.uri=http://192.168.4.54:8080
属性解释:
- coordinator:true or false,该节点是否为协调者;
- node-scheduler.include-coordinator:true or false,协调者是否作为 Worker
节点参与任务运行,测试时我们可以设为true,这样该节点既为 coordinator 又为 Worker, 这里测试的话我们设置成
true; - http-server.http.port:presto 服务端口;
- query.max-memory:一个查询可使用整个 Presto 集群的最大内存。
- query.max-memory-per-node:一个查询可以使用 Presto 集群中某个节点上的用户最大内存;
- query.max-total-memory-per-node:一个查询可以使用 Presto 集群中某个节点上的用户最大内存和系统内存,
其中系统内存是读取器、写入器和网络缓冲区等在执行期间使用的内存; - discovery-server.enabled:至于当 coordinator = true 时可选,否则会报错;表示
Coordinator 内嵌 discovery-server;worker 节点 即 coordinator = false
不可填写该属性; - discovery.uri:discovery-server 服务地址,在 coordinator 内嵌模式下 即为
coordinator 节点地址。
node.properties
Presto 每个节点的特定配置
node.environment=production
node.id=ffffffff-ffff-ffff-ffff-ffffffffffff
node.data-dir=/data/presto-server-333/data
属性解释:
- node.environment:Presto 集群名称,所有节点必须相同,字母数字字符开头,并且只能包含字母数字、
-、
或_字符。 - node.id:节点 id,每个节点必须唯一。
- node.data-dir:数据目录的位置(文件系统路径)。Presto 在这里存储运行时的日志和一些其他数据。
jvm.properties
Presto jvm 配置文件, Presto 启动 java 虚拟机时会读取此文件配置
-server
-Xmx16G
-XX:-UseBiasedLocking
-XX:+UseG1GC
-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
创建一个 Catalog
新建一个 catalog 以 hive 为例:
# 切换到 presto 安装的 etc 目录下
cd xx/etc
# 创建 catalog 文件夹
mkdir catalog
cd catalog
# 创建 hive.properties
touch hive.properties
# hive.properties 内容如下
connector.name=hive-hadoop2
hive.metastore.uri=thrift://192.168.4.52:9083
hive.config.resources=/etc/hadoop/conf/hdfs-site.xml,/etc/hadoop/conf/core-site.xml,/etc/hive/conf/hive-site.xml
属性解释:
- connector.name:connector 名称,在 Presto 中 hive 的 connector 名称为
hive-hadoop2,后面 catalog 的名称会为创建的文件 - hive.properties 中 .properties 之前的名称,在这里就是 hive;
- hive.metastore.uri:hive thrift 服务地址;
- hive.config.resources:相关配置文件地址,为了防止 hdfs 高可用的情况下,查询hive 时无法识别hdfs
服务地址
准备好后 etc 目录如下所示:

catalog 目录:

单独指定 JDK 版本
笔者服务器的 JDK 版本为 1.8,由于使用的是 prestosql-333 需要使用 JDK 11 + ,为了不影响其他服务,这里为 Presto 单独指定 JDK 版本,在 bin/launcher 添加如下语句:
PATH=/usr/local/jdk-11.0.10/bin:$PATH
添加后如下所示:

启动 Presto 服务
进入 Presto 安装目录
# 启动
./bin/launcher start
# 停止
./bin/launcher stop
启动后可在浏览器输入 discovery.uri 地址 http://192.168.4.54:8080,登录的话随便输入一个用户名都可以登,登录成功后页面如下

可以看到 worker 个数为 1,到这里我们的 Presto 服务就部署完成啦~
使用 Presto 查询
使用编译出来的 presto-cli-333.jar
# 重命名
mv presto-cli-333-executable.jar presto
# 授予执行权限
chmod u+x presto
# 连接
./presto1 --server 192.168.4.32:8089 --catalog hive
# 查看 catalogs
show catalogs
Catalog
---------
hive
system
(2 rows)
Query 20210616_091633_00001_5hwut, FINISHED, 1 node
Splits: 19 total, 19 done (100.00%)
0:00 [0 rows, 0B] [0 rows/s, 0B/s]
# 查看 schemas 对应的 hive下的 databases;
show schemas;
Schema
--------------------
default
information_schema
poc
test
wakedata
(5 rows)
Query 20210616_092006_00003_5hwut, FINISHED, 1 node
Splits: 19 total, 19 done (100.00%)
0:02 [5 rows, 65B] [2 rows/s, 31B/s]
# 查询 使用全名查询
select count(*) from hive.wakedata.fact_goods_site_key_kpi_d_01_orc;
_col0
-------
10000
(1 row)
Query 20210616_092539_00009_5hwut, FINISHED, 1 node
Splits: 18 total, 18 done (100.00%)
0:01 [10K rows, 234KB] [13.8K rows/s, 321KB/s]



结语
本文从 presto 的源码编译,到安装部署,到连接查询实操体验了 presto 的安装部署,同时对一些主要的配置文件进行了初步解释,希望能对你有帮助,同时也欢迎大家多多交流使用心得呦~
欢迎关注笔者公众号:此文在公众号同步推送,后续系列也会在近期推出呦~


本文详细记录了在Centos7环境下,使用JDK11编译Presto 333源码,以及后续的部署和配置过程。包括配置文件如`config.properties`和`jvm.properties`的详细解释,如何创建Hive catalog,以及如何通过Presto CLI进行查询操作。最后展示了成功部署后的Presto服务页面和查询示例。
Presto 安装部署&spm=1001.2101.3001.5002&articleId=117963471&d=1&t=3&u=00bd48d8fcd740b596ba610bf6d310c2)
1825

被折叠的 条评论
为什么被折叠?



