<< Click to Display Table of Contents >> Hive连接问题复制链接 |
1.驱动
• org.apache.hive.jdbc.HiveDriver (Hive 0.11.0版本后,对应HiveServer2)
•org.apache.hadoop.hive.jdbc.HiveDriver (Hive 0.11.0版本前,对应HiveServer)
➢注意:永洪7.5.2版本中对驱动进行的了整理, 因为驱动在setClassPath中先加载的会生效, 所以需要对使用了hadoop驱动的几个数据库进行排序。目前的驱动一般可以适配1.x版本的hive, 如果在使用过程中出现问题, 可以先明确当前的hive所使用的驱动是什么版本的, 如果是高于2.x版本的驱动, 需要将hive文件夹中更换为用户所使用的驱动。
常见的报错信息会有:
•驱动找不到:java.lang.NoClassDefFoundError: Could not initialize class …….
参考解决方案:更换为7.5.2后的驱动。
•驱动冲突:java.lang.NoSuchMethodError: …..
参考解决方案:这种情况一般是新增加了一些驱动, 与产品自带的驱动版本不一致, 有冲突。可以联系运维进行处理。
2.URL
(主要针对HiveServer2)
2.1 单节点Hive
•无Kerberos认证:
jdbc:hive2://<host>:<port>/<dbName>
•开启Kerberos认证:
jdbc:hive2://<host>:<port>/<db>;principal=<Server_Principal_of_HiveServer2>
2.2 Hive集群
•无Kerberos认证:
jdbc:hive2://<host1>:<port1>,<host2>:<port2>/<dbName>
•开启Kerberos认证:
jdbc:hive2://<host>:<port>/<db>;principal=<Server_Principal_of_HiveServer2>
2.3 Hive集群启动Zookeeper
•无Kerberos认证:
jdbc:hive2://<zkQuorum>/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2
•开启Kerberos认证:
jdbc:hive2://<zkQuorum>/<db>;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2;principal=<Server_Principal_of_HiveServer2>
<Server_Principal_of_HiveServer2>这里的principal是固定不变的, 指的是Hive服务所对应的principal,而不是用户所对应的principal;
<zkQuorum>是Zookeeper管理的Hive集群中的各个节点,就是hive-site.xml或者hivserver2-site.xml中的hive.zookeeper.quorum所配置的值。
一般其中的值为"xxx.xxx.xxx:24002,xxx.xxx.xxx:24002,xxx.xxx.xxx:24002". 其中的"xxx.xxx.xxx"为集群中Zookeeper所在节点的IP,端口默认是24002。
3.用户名密码
3.1 无Kerberos认证
用户名密码和普通数据库一样.
3.2 开启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. 该配置文件一般是用于Zookeeper安全认证的. 具体信息如下:
Client {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab="D:\\workspace\\jdbc-examples\\conf\\user.keytab"
principal="xxx@HADOOP.COM"
useTicketCache=false
storeKey=true
debug=true;
};
4.出错排查
4.1 排查驱动问题和URL端口是否连通
如上文驱动里面所说的信息, 一般需要明确用户数据库的版本和驱动版本.如果用户所使用的产品是7.5.2之前, 需要将jdbcDriver整理成7.5.2中的样子. 同时还需要将setClassPath文件中的setClasspath改成7.5.2中样子;
查看url指定的ip和端口是否可以ping通。
4.2 排查kerberos问题
如果用户使用了kerberos认证, 需要确认以下几点问题:
•各个服务器, 即永洪服务器与数据库服务器时间是否相差5分钟之内。这个值也是客户可以调整的, 最好设置时间一致。
•永洪服务器上是否安装了kerberos客户端, 执行kinit命令:
kinit –k -t /opt/xx/user.keytab user.principal
如果不报错,并且执行klist可以看到类似如下的信息,就说明kinit成功。
•krb5.conf文件中有kdc, admin_server和default_domain三项配置, 这三项也是IP:PORT形式的值, 需要保证能够ping通。
3 第三方工具排查.
*** 如果客户启动的是kerberos环境, Beeline, Squirrel SQL使用的先决条件是先执行kinit命令成功, klist可以看到kerberos认证信息才可以.
Beeline
Beeline是从 Hive 从0.11版本引入的新的命令行客户端工具, 它是基于SQLLine CLI的JDBC客户端. Hive客户端工具后续将使用Beeline 替代HiveCLI ,并且后续版本也会废弃掉HiveCLI 客户端工具。
Beeline支持嵌入模式(embedded mode)和远程模式(remote mode)。在嵌入式模式下,运行嵌入式的Hive(类似Hive CLI),而远程模式可以通过Thrift连接到独立的HiveServer2进程上。
该工具是Hive自带的, 也可以单独安装.
启动方式就是 beeline 或者 hive --service beeline 命令.
启动之后使用connect命令. !connect jdbc:hive2://localhost:10000/default
4.3 第三方工具Beeline,SQuirrel SQL排查
➢注:
•如果用户启动的是kerberos环境, 第三方工具使用的先决条件是先执行kinit命令成功, klist可以看到kerberos认证信息才可以。
•Beeline是从 Hive 从0.11版本引入的新的命令行客户端工具, 它是基于SQLLine CLI的JDBC客户端. Hive客户端工具后续将使用Beeline 替代HiveCLI ,并且后续版本也会废弃掉HiveCLI 客户端工具。Beeline支持嵌入模式(embedded mode)和远程模式(remote mode)。在嵌入式模式下,运行嵌入式的Hive(类似Hive CLI),而远程模式可以通过Thrift连接到独立的HiveServer2进程上。该工具是Hive自带的, 也可以单独安装。
•Beeline启动方式就是 beeline 或者 hive --service beeline 命令。启动之后使用connect命令: !connect jdbc:hive2://localhost:10000/default。
•SQuirrel Sql工具需要基于JDK, 使用前需要先确保安装了JDK, 3.8.1的Squirrel需要至少1.8版本的JDK.
排查步骤:
•运行SQuirrel Sql Client 程序,增加 Hive driver, 如图。
•在弹出对话框中的参数配置如下图。
Example URL: jdbc:hive2://192.168.2.89:10000/default
Class Name: org.apache.hive.jdbc.HiveDriver
Extra Class Path: 同产品的setClassPath, 把产品驱动下面的hadoop、hive文件夹中的驱动都选中。
•配置完成后,在已经注册的Driver列表里面,正常新建的myhive驱动显示如下。
•安装完驱动后,切换至上面的Aliases页,配置Hive Server连接,如图。