Presto 0.299 配置文件详解
详解 Presto 0.299 的 etc 目录全部配置文件:node.properties(节点属性)、jvm.config(JVM 参数含 JDK17 attach 必配)、config.properties(coordinator/worker/单节点多套参数表)、log.properties(日志级别)、catalog 目录(jmx/tpch/tpcds 实测连接器 + mysql/postgresql/hive 示例连接器)。全部基于 0.299 集群/单节点实测。
Presto 0.299 配置文件详解
目标:详解 Presto 0.299 的
etc目录全部配置文件。安装目录下需手动创建etc目录,其下包含 node.properties(节点属性)、jvm.config(JVM 参数)、config.properties(服务器核心配置)、log.properties(日志级别)、catalog/(连接器/数据源配置)。以下均基于 0.299 的 3 节点集群与单节点实测。
配置目录总览
presto-server-0.299/
└── etc/
├── node.properties # 节点属性(每个节点独立)
├── jvm.config # JVM 启动命令行参数
├── config.properties # Presto Server 核心配置
├── log.properties # 日志级别(默认 com.facebook.presto: INFO)
└── catalog/
├── jmx.properties
├── tpch.properties
├── tpcds.properties
├── mysql.properties # 示例:MySQL 连接器
├── postgresql.properties # 示例:PostgreSQL 连接器
└── hive.properties # 示例:Hive 连接器
一、node.properties —— 节点属性
每个节点独立,Presto 首次安装时创建,至少包含 3 项:
| 参数 | 说明 | 实测值 |
|---|---|---|
| node.environment | 集群名,同一集群所有节点必须一致;显示在 Web UI 右上角 | presto |
| node.id | 每节点的唯一标识,重启/升级保持稳定,多实例各写唯一值 | presto-coordinator |
| node.data-dir | 数据/日志存储目录(建议放安装目录外) | /opt/data/presto/data |
node.environment=presto
node.id=presto-coordinator
node.data-dir=/opt/data/presto/data
二、jvm.config —— JVM 参数
启动 JVM 时使用的命令行选项,一行一个。OutOfMemoryError 会使 JVM 进入不一致状态,故用 HeapDump + ExitOnOutOfMemoryError 强制终止。内存按机器 free -g 酌情设置。
-server
-Xmx3G
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+UseGCOverheadLimit
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:+ExitOnOutOfMemoryError
-XX:ReservedCodeCacheSize=256M
-Djdk.attach.allowAttachSelf=true
| 参数 | 作用 |
|---|---|
| -Xmx | 最大堆内存(worker 一般 2-4G,coordinator 依调度负载可更大) |
| -XX:+UseG1GC | 使用 G1 垃圾回收器(Presto 推荐) |
| -XX:G1HeapRegionSize=32M | G1 堆分区大小 |
| -XX:+HeapDumpOnOutOfMemoryError | OOM 时 dump 堆 |
| -XX:+ExitOnOutOfMemoryError | OOM 时强制终止进程 |
| -Djdk.attach.allowAttachSelf=true | JDK17 必配:允许 Attach API 自连接,不配则启动报 Can not attach to current VM |
三、config.properties —— 服务器核心配置
3.1 集群 coordinator(不兼 worker,生产推荐)
coordinator=true
node-scheduler.include-coordinator=false
http-server.http.port=8080
query.max-memory=5GB
query.max-memory-per-node=1GB
query.max-total-memory-per-node=2GB
discovery-server.enabled=true
discovery.uri=http://10.0.0.21:8080
3.2 集群 worker
coordinator=false
http-server.http.port=8080
query.max-memory=5GB
query.max-memory-per-node=1GB
query.max-total-memory-per-node=1GB
discovery.uri=http://10.0.0.21:8080
3.3 单节点(测试/开发)
coordinator=true
node-scheduler.include-coordinator=true
http-server.http.port=8080
query.max-memory=5GB
query.max-memory-per-node=1GB
query.max-total-memory-per-node=1GB
discovery-server.enabled=true
discovery.uri=http://10.0.0.24:8080
3.4 参数说明
| 参数 | 含义 |
|---|---|
| coordinator | 本实例是否作为 coordinator(接收客户端查询并调度执行) |
| node-scheduler.include-coordinator | coordinator 是否同时承担 worker 调度。大集群设 false 以保协调资源 |
| http-server.http.port | HTTP 端口,Presto 内外部通讯均走 HTTP |
| query.max-memory | 单个查询可用最大内存 |
| query.max-memory-per-node | 单节点上单个查询可用内存上限 |
| query.max-total-memory-per-node | 单节点上查询用户+系统总内存上限(须 < -Xmx 减去 headroom) |
| discovery-server.enabled | 是否内嵌 Discovery 服务(coordinator 设为 true,用于节点注册发现) |
| discovery.uri | Discovery 服务地址,即 coordinator 地址,不能以 / 结尾 |
| scheduler.http-client.* | 调度器 HTTP 请求/空闲超时(大集群建议 10m) |
| task.max-worker-threads | 每节点任务工作线程数 |
⚠️ 内存校验:
query.max-total-memory-per-node+ heap headroom(约 30% 堆)必须小于-Xmx,否则启动报Invalid memory configuration。
四、log.properties —— 日志级别
类似 Java 日志级别:INFO / DEBUG / ERROR / WARN。
com.facebook.presto=INFO
改成 DEBUG 可输出更细日志排查连接器问题,需重启生效。
五、catalog/ —— 连接器配置(数据源)
Presto 通过 connector 访问数据源,connector 挂载在 catalog 上。在 etc/catalog/<name>.properties 注册后,<name> 即成为 catalog 名,可用 catalog.schema.table 访问。
5.1 jmx(实测)
cat > etc/catalog/jmx.properties <<'EOF'
connector.name=jmx
EOF
jmx catalog 暴露 current / history 等 schema,可查 JVM/MBean。实测 SHOW TABLES FROM jmx.current 返回 374 张表;查询各节点 JVM:
SELECT node, vmname, uptime FROM jmx.current."java.lang:type=runtime";
presto-worker2 OpenJDK 64-Bit Server VM 363523
presto-worker1 OpenJDK 64-Bit Server VM 363698
presto-coordinator OpenJDK 64-Bit Server VM 615311
5.2 tpch / tpcds(实测,自包含基准数据)
echo 'connector.name=tpch' > etc/catalog/tpch.properties
echo 'connector.name=tpcds' > etc/catalog/tpcds.properties
无需外部数据源即可生成基准数据,实测:
SELECT count(*) FROM tpch.sf1.orders; -- 1500000
SELECT count(*) FROM tpch.sf1.lineitem; -- 6001215
5.3 mysql(示例)
cat > etc/catalog/mysql.properties <<'EOF'
connector.name=mysql
connection-url=jdbc:mysql://192.168.100.10:3306
connection-user=root
connection-password=q1w2e3r4
EOF
5.4 postgresql(示例)
cat > etc/catalog/postgresql.properties <<'EOF'
connector.name=postgresql
connection-url=jdbc:postgresql://192.168.100.11:5432/example
connection-user=example
connection-password=q1w2e3r4
EOF
5.5 hive(示例,需连接 Hive Metastore 与 HDFS)
cat > etc/catalog/hive.properties <<'EOF'
connector.name=hive-hadoop2
hive.metastore.uri=thrift://192.168.100.12:9083
hive.config.resources=/etc/hadoop/conf/core-site.xml,/etc/hadoop/conf/hdfs-site.xml
hive.allow-drop-table=true
hive.storage-format=ORC
hive.max-partitions-per-writers=1000
EOF
hive.metastore.uri 与 Hive hive-site.xml 的 metastore 地址、端口(默认 9083)对应。
注意事项
- 修改
jvm.config/config.properties/ 新增 catalog 文件后均需重启生效:systemctl restart presto - 新增 catalog 文件后重启即可生效,无需改动其它文件
node.environment、node.id修改需节点一致性校验- discovery.uri 使用 coordinator 的 IP/域名,集群内必须可达
参考链接
- 官方配置属性:https://prestodb.github.io/docs/current/admin/properties.html
- Connectors:https://prestodb.github.io/docs/current/connector.html
- 部署配置:https://prestodb.github.io/docs/current/installation/deployment.html
本文档由 www.quzuo.net 平台开发