目录
尝试过程
解决之道
总结
尝试过程
注意此章节为记录试错过程,无需跟随操作,仅作试错记录。真正操作方法请看“解决之道”章节
环境ambari安装的hbase2.1.6
使用apche phoenix默认驱动配置
备注:Apache Phoenix 是一个开源的、基于 SQL 的查询引擎,它使得可以在 Apache HBase(分布式 NoSQL 数据库)上使用标准的 SQL 查询语言。Phoenix 提供了对 HBase 的 SQL 接口,使得用户可以使用熟悉的 SQL 语法来查询和操作 HBase 中的数据。
在hbase配置文件中找到ZooKeeper Znode Parent参数的值
并在编辑驱动中添加:
添加驱动属性
测试连接
出现:
Insufficient permissions to create SYSTEM namespace and SYSTEM Tables
权限不足,无法创建 SYSTEM 命名空间和 SYSTEM空间下的 表
手动登录hbase创建SYSTEM,并授予hbase用户权限
测试连接
ERROR 1012 (42M03): Table undefined. tableName=SYSTEM.CATALOG
又出现没有SYSTEM.CATALOG表,此时怀疑是否需要提前在服务器上安装apache phoenix?
按照HBase 整合Phoenix_hbase2.0.2集成phoenix_十二同学啊的博客-CSDN博客
方法在ambari-hadoop1节点安装完后,执行
[linux@node1 phoenix]$ bin/sqlline.py ambari-hadoop1:2181
命令时出现Caused by: org.apache.hadoop.hbase.TableNotFoundException: SYSTEM.CATALOG的错误
解决方案:重新清理hbase,如果可以的话(建议先备份,系统快照)
1 在执行命令之前:先关闭hbase(包括HMaster和regionServer)
2 /bin/hbase clean --cleanAll
注意:hbase clean --cleanAll是清楚hbase clean --cleanALL是清除所有数据慎用
3 然后重新启动hbase
4 [root@hdp1 /mnt/software/phoenix-4.10.0-cdh5.12.0/bin]#python ./sqlline.py ambari-hadoop1:2181
成功
dbeaver配置:
注意服务器ambari-hbase上 也需要配置以下两个属性的值:
测试连接
ERROR 2007 (INT09): Outdated jars. Newer Phoenix clients can't communicate with older Phoenix servers. The following servers require an updated phoenix-[version]-server.jar to be put in the classpath of HBase: region=SYSTEM.CATALOG,,1701162392278.2179ae0a2eac521be10539173a8f47be., hostname=ambari-hadoop2,16020,1701163111938, seqNum=16
额,dbeaver和服务器端Phoenix使用的jar包不一致,更换驱动之前在ambari-hadoop1节点上安装的phoenix目录下的 client jar包,测试连接后dbeaver一直connecting main,最后超时报错KeeperErrorCode = ConnectionLoss for /hbase-unsecure
但是zk服务正常、hbase服务也正常,通过zkCli.sh也能查看/hbase-unsecure下的内容,所有虚拟机节点的防火墙也处于关闭状态,百思不得其解
解决之道
这时无意中看见在hbase组件页面有一个叫做“phoenix query servers”的服务
点进去查看发现这个服务进程是在ambari-hadoop2节点上,于是去到ambari-hadoop2节点的/usr/hdp/3.1.5.0-152路径下ll查看一下,果然发现有一个名叫“phoenix”的目录,进去该目录发现
有一个client jar包
于是马上下载到本机,并修改dbeaver apache phoenix驱动配置,将驱动替换为此jar包并成功找到类
剩余驱动配置如下
测试连接成功!成功解决
解决成功后展开表出现权限问题:
org.apache.hadoop.hbase.security.AccessDeniedException: Insufficient permissions for user ‘18389',action: scannerOpen, tableName:SYSTEM:CATALOG, family:0, column: TYPE_NAME
解决思路:为‘18389’用户赋予在SYSTEM:CATALOG表上的读写权限
解决方法:利用ranger创建一个名为‘18389’的用户,并赋予其在hbase上的权限
再次展开表后,没有权限问题但是一片空白,并且 dbeaver上创建表后仍然不可见
并且其他的namspace不可见,其余表也不可见
将之前设置的phoenix.schema.isNamespaceMappingEnabled值改为false(
phoenix.schema.isNamespaceMappingEnabled
是 Apache Phoenix 中的一个配置属性,用于启用或禁用 Phoenix 对 HBase 命名空间的支持。当该属性被启用时,Phoenix 将使用 HBase 的命名空间来组织表。在启用命名空间映射后,Phoenix 表名将包括命名空间前缀。
例如,假设 phoenix.schema.isNamespaceMappingEnabled
被设置为 true,如果你在命名空间 "Test" 中创建了表 "MyTable",则 Phoenix 中的表名将是 "Test.MyTable"。
如果禁用了命名空间映射,那么 Phoenix 将使用默认的 HBase 表。在这种情况下,Phoenix 表名就是 HBase 表名,不包括命名空间前缀。
)
设置默认数据库为空值
再次断开重连,可以看见default命名空间下的表和其他命名空间下的表,并且执行后可以看见新建的表
总结
当利用dbeaver 连接ambari部署的hbase时,由于已经自带了phoenix query servers服务,所以需要将phoenix query servers服务所在节点目录下的client jar驱动包,下载到本地,并编辑驱动配置指定该jar包。避免使用其他jar包以免出现驱动的问题,并且需要注意在URL后面添加ZooKeeper Znode Parent 的后缀。