单节点presto能运行不代表多节点自动连通;coordinator与worker需通过discovery.uri对齐,端口或地址配置错误将导致失联。

单节点 Presto 能跑通,不代表多节点能自动连上;coordinator 和 worker 之间靠 discovery.uri 对齐,配错端口或地址就直接失联。
coordinator 启动失败:检查 config.properties 关键开关
常见现象是服务启动后立刻退出,日志里看不到监听端口。核心问题往往出在三个布尔配置没对齐:
-
coordinator=true必须设为true,否则该节点不承担协调职责 -
node-scheduler.include-coordinator=true在单节点测试时必须开,否则 coordinator 不会给自己分发任务 -
discovery-server.enabled=true必须开启,且要和discovery.uri地址一致(例如http://0.0.0.0:8080),否则 worker 注册不上
注意:discovery.uri 的协议必须是 http,不能写成 https;端口必须和 http-server.http.port 完全一致,哪怕只差 1 位也会导致 worker 连不上 discovery 服务。
worker 加不进集群:node.id 和 node.environment 必须全局唯一且一致
worker 启动后 log 里反复出现 No nodes available to run query,大概率是节点标识冲突或环境不匹配:
-
node.environment在所有节点的etc/node.properties中必须完全相同(比如都写production),大小写敏感 -
node.id每个节点必须唯一,不能复制粘贴;推荐用uuidgen生成,避免手写重复 -
node.data-dir路径需存在且 presto 用户有读写权限,否则 worker 初始化失败静默退出
验证方式:curl http://coordinator-host:8080/v1/node,返回 JSON 列表里应该包含所有 worker 的 nodeId —— 如果没出现,说明注册流程卡在 discovery 阶段。
Hive catalog 连不上 metastore:重点核对 thrift 协议与权限
执行 SHOW SCHEMAS IN hive 报错 Failed connecting to Hive metastore,不是版本不兼容,而是连接链路断在中间:
-
hive.metastore.uri值必须是thrift://host:port格式,不能带/结尾,不能写成http:// - 确认 Hive metastore 服务确实在运行:
netstat -tlnp | grep :9083(默认端口) - 如果 HDFS 启用了 Kerberos,
etc/jvm.config中必须加-DHADOOP_USER_NAME=hive(或对应服务用户),否则权限拒绝 - catalog 文件名必须是
etc/catalog/hive.properties,Presto 只认这个路径和后缀,hive2.properties或hive.conf都无效
小技巧:把 connector.name 改成 hive-hadoop3 或 hive-cdh6 并不影响功能,但能帮你快速区分不同集群的配置来源。
启动命令和目录结构稍有偏差就会找不到配置
Presto 对目录结构极其敏感,bin/launcher 只会在当前目录的 etc/ 下找配置,不会向上递归:
- 解压后不要直接在
presto-server-0.x/目录下运行bin/launcher,先cd进去再执行 -
node.properties、config.properties、jvm.config必须全在etc/下,log.properties缺失不会报错但会导致日志级别不可控 - catalog 目录必须是
etc/catalog/,里面每个.properties文件对应一个 catalog,文件名就是 catalog 名(hive.properties→ catalog 名为hive)
最容易被忽略的是:Presto 启动时若发现 etc/ 下缺少任一必需配置文件(比如漏了 jvm.config),它不会提示“缺文件”,而是直接以 JVM 默认参数启动,内存爆掉才暴露问题。











