java 使用phoenix 连接hbase,无法连接zk
# 开发环境
背景
linux部署后,zk正常启动;hbase的Hmaster以及HRegionServer正常启动;phoenix目录下输入命令 ./bin/sqlline.py hd-node-1,hd-node-2,hd-node-3,正常进入phoenix操作界面且正常操作。到这里我以为万事大吉了,高高兴兴的准备打包部署。。。。启动没有问题,直到执行phoenix的时候,gg了,报错如下:
我的配置如下:
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。一阵郁闷,既然机器上命令都能连,程序里连就不行了,有啥玄机么?
猜测
既然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去掉;
代码里面为啥是/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操作,必须保证和配置文件中的一致。