Hive连接问题

<< Click to Display Table of Contents >>

当前位置:  数据准备 > 数据源 > SQL数据源 > 常见问题 

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成功。

hbase_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, 如图。

squirrel1

在弹出对话框中的参数配置如下图。

squirrel2

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驱动显示如下。

squirrel3

安装完驱动后,切换至上面的Aliases页,配置Hive Server连接,如图。

squirrel4