本帖最后由 永洪tech-Lucy 于 2018-3-13 13:08 编辑
近期有许多小伙伴给我倒苦水“连接到 Hbase 报错了“,热心的小姐姐现在就给大家支妙招
第一步:看驱动 (JDK最低为1.7)1. org.apache.phoenix.queryserver.client.Driver(推荐使用这种方式) 表示thin driver, connects via Phoenix Query Server. 目前产品集成了thin driver的驱动,可以直接使用 2. org.apache.phoenix.jdbc.PhoenixDriver 表示 thick driver, connects directly to Phoenix. 产品没有集成驱动, 这种驱动自身集成了很多第三方的jar, 需要手动添加到产品驱动目录中 驱动导致的常见报错: (1) 驱动找不到. java.lang.NoClassDefFoundError: Could not initialize class ……. 这种情况一般更换为7.5.2的驱动就好了. (2) 驱动冲突. java.lang.NoSuchMethodError: ….. 这种情况一般是新增加了一些驱动, 与产品自带的驱动版本不一致, 有冲突.
为了解决“驱动冲突”的问题,小姐姐建议对数据库驱动进行排序(重启后生效喔),如下图:
第二步:看URL (主要针对Thin Driver ) 1. 单节点Hbase. 无Kerberos认证:jdbc:phoenix:thin:url=http://<host>:<port> ;serialization=PROTOBUF 开启Kerberos认证: jdbc:phoenix:thin:url=http://<host>:<port> ;serialization=PROTOBUF;principal=<Server_Principal> 2. Hbase集群. 无Kerberos认证:jdbc:phoenix:thin:url=http://<host1>:<port1>,<host2>:<port2> ;serialization=PROTOBUF 开启Kerberos认证: jdbc:phoenix:thin:url=http://<host>:<port> ;serialization=PROTOBUF;principal=<Server_Principal > 3. Hbase集群启动Zookeeper. 无Kerberos认证: jdbc:phoenix:thin:url=http://<zkQuorum>;serialization=PROTOBUF 开启Kerberos认证: jdbc:phoenix:thin:url=http://<zkQuorum>;serialization=PROTOBUF;principal=<Server_Principal_of_HiveServer2> 备注: <Server_Principal_of_HiveServer2>这里的principal是固定不变的, 指的是服务所对应的principal,而不是用户所对应的principal, 比如phoenix@EXAMPLE.COM; <zkQuorum>是Zookeeper管理的Hbase集群中的各个节点, 一般其中的值为"xxx.xxx.xxx:24002,xxx.xxx.xxx:24002,xxx.xxx.xxx:24002". 其中的"xxx.xxx.xxx"为集群中Zookeeper所在节点的IP,端口默认是24002
第三步:看用户名&密码 无Kerberos认证:用户名密码和普通数据库一样. 开启Kerberos认证:
用户: 用户所对应的Kerberos Principal Name. 密钥文件路径: KeyTab文件的路径. 比如 /opt/xxx/user.keytab Krb5文件路径: Krb5.conf文件的路径. 比如 /opt/xxx/krb5.conf. Windows环境下面名字需要改成Krb5.ini. 备注: Krb5文件一般会放到一个默认的地方, 这样就不需要去配置该项. 如果客户不提供这个文件, 可能他们已经在默认位置放了这个文件. 一般来说, Windows的默认位置是C:\Windows\Krb5.ini或者C:\winnt\Krb5.ini, Linux的默认位置/etc/Krb5.conf或者 /etc/krb5/krb5.conf Jaas文件路径: Jaas文件的路径. 比如 /opt/xxx/jaas.conf. 该配置文件一般是用于
|