Java使用JDBC连接Impala

  前段时间,有一个项目在连接Impala的时候,可以测试连接成功,但是查询不出表。但是通过impala-shell的时候,是可以查询出来的,我觉的这种方式查询出来的话,可能和jdbc的方式不一样,因为impala-shell连接的端口是21000,jdbc连接的端口是21050。我通过beeline的方式使用jdbc:hive2:的方式查询,因为impala和hive使用同一个metastore服务。刚开始的时候用jdbc:hive2://node1:21050/去连接,能成功,但是查询不出数据,而且使用hiveserver2的时候,得切换到hive用户下,我就发现是不是用户没有设置,导致查询不出对应的权限。最后才发现,确实是jdbc url的设置问题,现在总结如下:

一、Impala中使用的端口:

ComponentServicePortAccess RequirementComment

Impala Daemon

Impala Daemon Frontend Port

21000

External

Used to transmit commands and receive results by impala-shelland version 1.2 of the Cloudera ODBC driver.

Impala Daemon

Impala Daemon Frontend Port

21050

External

Used to transmit commands and receive results by applications, such as Business Intelligence tools, using JDBC, the Beeswax query editor in Hue, and version 2.0 or higher of the Cloudera ODBC driver.

其中,21000是impala-shell使用,21050是impala jdbc使用。

 

二、JDBC Driver

在Impala 2.0以后,可以使用两种方式去连接impala, Cloudera JDBC Connector 和 Hive 0.13 JDBC driver,一般推荐使用的是Cloudera JDBC 2.5 Connector。

 

三、连接Impala

这里有一个CDH官方给出的例子,包括使用的jar包:https://github.com/onefoursix/Cloudera-Impala-JDBC-Example,这里不做具体的说明,主要是对URL进行解释。

使用hive驱动连接的时候,jdbc url为jdbc:hive2://host:port/;auth=noSasl,使用cloudera驱动时为:

jdbc:impala://Host:Port[/Schema];Property1=Value;Property2=Value;...

驱动类使用:

com.cloudera.impala.jdbc41.Driver

例如连接URL为:

jdbc:impala://localhost:21050;AuthMech=3;UID=UserName;PWD=Password

Impala支持多种安全机制,如:

  • 没有认证
jdbc:impala://localhost:21050;AuthMech=0
  • 使用Kerberos认证
jdbc:impala://localhost:21050;AuthMech=1;KrbRealm=EXAMPLE.COM;KrbHostFQDN=impala.example.com;KrbServiceName=impala
  • 使用用户名来验证
jdbc:impala://localhost:21050;AuthMech=2;UID=impala
  • 使用用户名和密码
jdbc:impala://localhost:21050;AuthMech=3;UID=impala;PWD=*****
  • 使用用户名、密码和安全连接
jdbc:impala://localhost:21050;AuthMech=4;SSLKeyStore=C:\\Users\\bsmith\\Desktop\\keystore.jks;SSLKeyStorePwd=*****;UID=impala;PWD=*****

 

关于URL后面的参数有AuthMech、DefaultStringColumnLength、DelegationUID、KrbFQDN、KrbRealm、KrbServiceName、PWD、RowsFetchedPerBlock、SocketTimeout、SSLKeyStore、SSLKeyStorePwd、UID、UseNativeQuery、CatalogSchemaSwitch、PreparedMetaLimitZero等。

前面的问题就是因为未指定UID导致,但是通过上面这些,还是没能解决其他错误,最后查询得知,由于说是驱动问题,需呀增加参数UseSasl=0才可以,修改后的如下:

jdbc:impala://node1:21050/default;UseSasl=0;AuthMech=3;UID=impala;PWD=

或者(区别就是没有增加PWD属性)

jdbc:impala://node1:21050/default;UseSasl=0;AuthMech=3;UID=impala

 

特别说明,在使用kerberos的时候,需要在建立连接之前,进行kerberos登录(UserGroupInformation.loginFromKeytab),具体不再详述。

四、Impala 负载均衡

在Impala的配置界面,有设置Impala Load Balancer的地方,就是进行负载均衡,防止某一个Impalad负载过大,由于客户使用多个Impalad服务,故也配置了负载均衡,只需要在使用jdbc时的url中指定负载的地址和端口即可。

 

参看:

1.官网:https://www.cloudera.com/documentation/enterprise/latest/topics/impala_jdbc.html

2.驱动问题:https://blog.csdn.net/tom_fans/article/details/84838936

 

转载于:https://www.cnblogs.com/flowerbirds/p/11256214.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值