JAVA 操作phoenix 5.0.0 -HBase-2.0 遇 zk NoNode问题

java 使用phoenix 连接hbase,无法连接zk

# 开发环境

  1. zk:hd-node-1,hd-node-2,hd-node-3 (使用外部zk,非hbase自带)
  2. hbase:2.0.0
  3. phoenix:5.0.0

背景
linux部署后,zk正常启动;hbase的Hmaster以及HRegionServer正常启动;phoenix目录下输入命令 ./bin/sqlline.py hd-node-1,hd-node-2,hd-node-3,正常进入phoenix操作界面且正常操作。到这里我以为万事大吉了,高高兴兴的准备打包部署。。。。启动没有问题,直到执行phoenix的时候,gg了,报错如下:
JAVA 操作phoenix 5.0.0 -HBase-2.0 遇 zk NoNode问题_第1张图片我的配置如下:

spring.datasource.phoenix-db.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.phoenix-db.driver-class-name=org.apache.phoenix.jdbc.PhoenixDriver
spring.datasource.phoenix-db.url=jdbc:phoenix:hd-node-1,hd-node-2,hd-node-3:2181
spring.datasource.phoenix-db.username=root
spring.datasource.phoenix-db.password=root

本人也是刚接触zk,hbase,phoenix。一阵郁闷,既然机器上命令都能连,程序里连就不行了,有啥玄机么?

猜测

  1. 既然zk 报没有节点,好吧,上zk服务器,./zkCli.sh -server hd-node-1 ,然后 ls /
    找到所有的节点。发现果然没有这个/hbase目录,但是有一个
    /hbase-unsecure目录,这个有点印象,不就是hbase配置文件hbase-site.xml
    中的zookeeper.znode.parent的值么,是的,我是这么配的。那问题来了,/hbase这个难道是默认的?也没有哪里配过呀,后续再认证下,至少这里可以确认zk确实找不到/hbase目录,可执行方案,那就是手动创建一个目录(create -s /hbase/master “xxx”)或者把配置文件中的zookeeper.znode.parent去掉;

  2. 代码里面为啥是/hbase ,而配置文件中是/hbase-unsecure,那能不能在代码中 通过配置 把/hbase改为/hbase-unsecure呢?

最终解决:

通过认真考虑,感觉第二个猜测实验耗时是比较少的。于是度娘,找到方案,配置略改如下:

spring.datasource.phoenix-db.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.phoenix-db.driver-class-name=org.apache.phoenix.jdbc.PhoenixDriver
spring.datasource.phoenix-db.url=jdbc:phoenix:hd-node-1,hd-node-2,hd-node-3:2181:/hbase-unsecure
spring.datasource.phoenix-db.username=root
spring.datasource.phoenix-db.password=root

重新测试,正常连上。

此次,得到的信息是:hbase默认的zookeeper.znode.parent=/hbase/hbaseid,若使用java操作,必须保证和配置文件中的一致。

你可能感兴趣的:(phoenix+hbase)