本文用 Phoenix Query Server 把 2181+16000+16020 三个端口浓缩成一个 8765:PQS 部署与 systemd 托管、DBeaver 五步配通、三个诡异常见问题(漏 PROTOBUF 连不上、连接成功树空白、裸 nohup 重启失联)逐一拆解,最后附安全性提醒。
目录
- 一、PQS 是什么:为什么连图形客户端要用它
- 二、部署:一个 6MB 的 jar 换三个端口
- 三、systemd 托管:告别裸 nohup
- 四、DBeaver 五步配通
- 五、三大诡异问题拆解(★精华)
- 六、安全性提醒与适用边界
- 七、系列总结
- 八、写在最后
一、PQS 是什么:为什么连图形客户端要用它
想用 DBeaver 这类图形工具查 HBase,直接配 Phoenix 的 fat JDBC 要应付三个端口(ZK 2181 + HMaster 16000 + RegionServer 16020)和一大堆依赖 jar。Phoenix Query Server(PQS)是个更优雅的网关:
| 方案 | 客户端要带 | 网络要通 |
|---|---|---|
| Phoenix fat JDBC | 一大堆依赖 jar | 2181 + 16000 + 16020 |
| PQS thin JDBC | 1 个 6.29MB 自包含 jar | 1 个 8765 端口(HTTP) |
| 项目 | 值 |
|---|---|
| PQS | phoenix-queryserver 6.0.0 |
| 部署目录 | /home/hduser/phoenix-queryserver/ |
| 服务端口 | 8765(HTTP,serialization=PROTOBUF) |
| 部署日期 | 2026-10-10(实测验收通过) |
二、部署:一个 6MB 的 jar 换三个端口
客户端驱动是phoenix-queryserver-client-6.0.0.jar(6,294,972 B,2926 个类),单文件免依赖,这就是"thin"的含义。服务端部署要点:
tarzxf apache-phoenix-6.0.0-queryserver-bin.tar.gz-C/home/hduser/mv/home/hduser/apache-phoenix-6.0.0-queryserver-bin /home/hduser/phoenix-queryserver★必须关掉 MiniCluster 测试模式(不关会起一个本地迷你 HBase,吃内存还可能干扰真集群),启动参数加:
-Dphoenix.queryserver.jmxjsonendpoint.disabled=true判据:grep MiniCluster pqs.log零命中。小堆配置-Xmx512m -XX:+UseSerialGC即可,实测稳态 RSS 只有 75~78MB。
JDBC 连接串长这样(DBeaver 里就是模板):
jdbc:avatica:remote:url=http://10.10.10.93:8765;serialization=PROTOBUF三、systemd 托管:告别裸 nohup
用nohup &起的服务,服务器一重启就没了,半夜掉了没人拉。改成 systemd unit(/etc/systemd/system/phoenix-queryserver.service):
[Unit] Description=Phoenix Query Server After=network.target [Service] Type=simple User=hduser ExecStart=/home/hduser/phoenix-queryserver/bin/pqs.sh run Restart=on-failure RestartSec=10 [Install] WantedBy=multi-user.target两个实测细节:
pqs.sh run是前台模式;脚本内echo $$ > pidfile后exec java,进程 PID 不变,所以 pidfile = MainPID,旧的 status/stop 逻辑照用;- 启用自启并验证自愈:
systemctl daemon-reload systemctlenable--nowphoenix-queryserverkill-9<PQS主进程PID>systemctl show-pNRestarts--valuephoenix-queryserver# 约 10 秒后输出 1,自愈成功★ 日常不要手工 pqs.sh start:它和 systemctl 抢 8765 端口,会让 systemctl start 报 exit code 1。要用手工方式就先 pqs.sh stop 清场。
四、DBeaver 五步配通
- 新建连接,选Apache Phoenix(没有就选 Generic/JDBC),URL 模板填:
jdbc:avatica:remote:url=http://{host}:{port};serialization=PROTOBUF - Host 填
10.10.10.93(只填 IP),Port8765,用户名密码留空; - Driver properties 里 Driver class 手动填
org.apache.phoenix.queryserver.client.Driver; - Libraries → Add File → 选
phoenix-queryserver-client-6.0.0.jar; - Test Connection 绿勾 → SQL 编辑器里
SELECT * FROM IOT LIMIT 100;(表名大写)。
五、三大诡异问题拆解(★精华)
问题 1:URL 漏了 serialization,直接连不上
服务端只开 PROTOBUF,客户端默认 JSON → 服务端报JsonParseException。必须带;serialization=PROTOBUF,且是英文分号、分号前后不要有空格。
问题 2:连接成功,但左侧树一片空白(本文标题)
Test Connection 绿勾、SQL 也能查到千万行数据,可导航树里就是没有你的表。根因:表建在空字符串 schema下,而getSchemas()只返回''和SYSTEM——空名 schema 挂不上 DBeaver 的导航树,但这是纯展示层问题,数据一点没丢,SQL 照常可查。
根治方案(视图零成本,Phoenix 不支持 ALTER TABLE 挪 schema):
CREATESCHEMAIFNOTEXISTSIOTDB;CREATEVIEWIOTDB.IOT_VASSELECT*FROMIOT;刷新后 IOTDB.IOT_V 就出现在树里了。
问题 3:裸 nohup 起的 PQS,服务器重启后"能连但查不到数"
两个因素叠加:PQS 用 nohup 起的重启即失联(改 systemd 解决);更隐蔽的是即使 PQS 活着也会查不到数——HDFS/YARN/HBase 没有 systemd,服务器重启后要手工start-dfs.sh → start-yarn.sh → start-hbase.sh,而 PQS 是 systemd 自动拉起的,就绪得比手工启动的 HBase 早,加上连接懒加载,就会出现"PQS 在跑、8765 能连、查询全失败"。口诀:先起 HBase,PQS 不用管。
六、安全性提醒与适用边界
- ★ PQS 默认无认证:8765 端口上任何人都能读全量数据,而实验环境 firewalld 是关的、全网段可达。生产使用必须走 SPNEGO/认证代理/限网段。
- PQS 是单点(在 hadoop1),且不适合全表聚合——千万行 COUNT 要 25~29 秒,演示和点查、LIMIT 小结果集才是它的舒适区。
- 排错速查:连不上→
systemctl status;Table undefined→表名大写;卡死→加 LIMIT;ClassNotFoundException→驱动 jar 没加。
七、系列总结
六篇文章走过的完整链路:
| 系列 | 主题 | 关键收获 |
|---|---|---|
| 一 | Hadoop 3.3.6 三节点部署 | 小内存 MR 参数、scp 属主坑 |
| 二 | HBase 2.5.16 部署 | wal.provider 救 HMaster、启动顺序 |
| 三 | 千万行导入 | 行键两种打散、并行度红线 |
| 四 | jar 事故复盘 | 服务端保留、客户端绕开 |
| 五 | Phoenix 集成 | 协处理器下推、SALT_BUCKETS 权衡 |
| 六 | PQS + DBeaver | thin 网关、空 schema 坑、systemd 托管 |
四层架构(Hadoop 存储 → HBase 列存 → Phoenix SQL → PQS 图形网关)在一套三节点小虚拟机上全部实测跑通。
八、写在最后
至此"大数据集群从零到图形化"系列完结。回头看,最难的不是任何一步安装命令,而是那些"组件在跑但互相连不上""验证通过但是假象"的灰色时刻——希望这六篇的踩坑对照表能帮你把排查时间从几小时压缩到几分钟。
如果这个系列对你有帮助,欢迎点赞收藏;下一篇新系列(Kafka/ELK 日志链路)正在准备中,敬请关注。