presto必须手动下载、解压、配置,单节点成功不保证多节点自动连通;常见失败源于config.properties中coordinator=true、node-scheduler.include-coordinator=true、discovery-server.enabled=true三者未正确对齐,或discovery.uri协议/端口与http-server.http.port不一致,或node.environment和node.id未全局唯一严格匹配。

presto 不是 apt/yum 直接装的软件包,必须手动下载、解压、配置三步走。单节点能跑通,不等于多节点自动连上——绝大多数失败都卡在配置对齐上,不是环境或权限问题。
coordinator 启动就退出?检查这三个布尔开关
日志里看不到 http-server 监听记录,或者进程秒退,基本就是 config.properties 里关键布尔值没设对:
-
coordinator=true:必须为true,否则该节点根本不尝试当协调器 -
node-scheduler.include-coordinator=true:单节点测试时必须开,否则 coordinator 拒绝给自己分发任务,查不到任何 worker -
discovery-server.enabled=true:必须开启,且要和discovery.uri的协议+端口完全一致(比如http://0.0.0.0:8080),否则 worker 根本注册不上
注意:discovery.uri 必须用 http,不能写 https;端口必须和 http-server.http.port 完全一致,差 1 位都会失联。
worker 加不进集群?node.id 和 node.environment 必须全局唯一且严格一致
启动后日志反复出现 No nodes available to run query,大概率是节点标识冲突:
-
node.environment在所有节点的etc/node.properties中必须**完全相同**(如都写production),大小写敏感,不能一个写prod一个写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,hive2.properties或hive.conf都无效
多节点部署最容易被忽略的点
不是端口不通,也不是防火墙没开,而是发现服务地址没对齐:
- 所有 worker 的
discovery.uri必须指向 coordinator 的实际监听地址(比如http://192.168.0.107:8080),不能写localhost或127.0.0.1,否则 worker 注册到本地 loopback,coordinator 看不见 - coordinator 的
http-server.http.port和discovery.uri端口必须一致,且该端口需在 coordinator 主机上真实监听(ss -tlnp | grep :8080) - worker 节点的
http-server.http.port可以和 coordinator 不同(如设为 8081),但 discovery 通信只走 coordinator 的 discovery 端口
真正卡住的时候,往往不是某处写错了,而是几处配置之间互相矛盾——比如 discovery.uri 写对了,但 coordinator 没开 discovery-server.enabled,或者开了却没配 http-server.http.port 监听,这种组合错误最难排查。











