zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Mininet系列实验(六):Mininet动态改变转发规则实验
    Mininet系列实验(五):Mininet设置带宽之简单性能测试
    Mininet系列实验(三):Mininet命令延伸实验扩展
    Mininet系列实验(一):Mininet使用源码安装
    集合初始化器概览(Visual Basic)
    为什么开发人员不能估算时间?
    Lambda 表达式 Lambda Expressions (Visual Basic)
    宽松委托转换(Relaxed delegate conversion)
    [翻译]SQL Server 未公开的两个存储过程sp_MSforeachtable 和 sp_MSforeachdb
    Visual Basic 2010 新特性
  • 原文地址:https://www.cnblogs.com/flowerbirds/p/11256214.html
Copyright © 2011-2022 走看看