单节点能跑通不等于多节点自动连通,最常卡在discovery.uri配置错误、node.id重复或metastore连接失败三处;需确保coordinator=true、node-scheduler.include-coordinator=true、discovery-server.enabled=true三开关对齐,discovery.uri协议为http且端口与http-server.http.port严格一致,node.environment全局相同、node.id全局唯一,hive.metastore.uri格式正确且服务可达,所有worker能从自身网络curl通discovery地址。

单节点能跑通,不等于多节点自动连上;最常卡在 discovery.uri 配置错、node.id 重复、或 metastore 连不上这三处。
coordinator 启动失败:检查 config.properties 三个布尔开关
服务启动后立刻退出、日志里看不到监听端口,大概率是 config.properties 里这三个配置没对齐:
-
coordinator=true—— coordinator 节点必须设为true,否则它根本不承担协调职责 -
node-scheduler.include-coordinator=true—— 单节点测试时必须开,否则 coordinator 不会给自己分发任务(多节点可关) -
discovery-server.enabled=true—— 必须开启,且discovery.uri地址要和它完全一致(比如http://0.0.0.0:8080)
注意:discovery.uri 的协议必须是 http,不能写 https;端口必须和 http-server.http.port 完全一致,差 1 位都会导致 worker 注册失败。
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 的用户(如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都无效
真正容易被忽略的是:discovery.uri 的地址必须能被所有 worker 主机直接解析并访问——别只在 coordinator 上 curl 通就以为 OK,得从每个 worker 上 curl -v http://coordinator-ip:8080/v1/service/presto/discovery 看是否返回 200。防火墙、hosts 解析、SELinux 限制,任何一个环节断掉,集群就只是“看起来配好了”。


















