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

一、Impala中使用的端口:

Component Service Port Access Requirement Comment

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

Java使用JDBC连接Impala的更多相关文章

  1. java通过jdbc连接impala

    下载所需jar包:http://www.cloudera.com/downloads/connectors/impala/jdbc/2-5-28.html 选择使用impalajdbc41版本 imp ...

  2. JAVA使用jdbc连接MYSQL简单示例

    以下展示的为JAVA使用jdbc连接MYSQL简单示例: import java.sql.DriverManager; import java.sql.ResultSet; import java.s ...

  3. 基于CDH5.x 下面使用eclipse 操作hive 。使用java通过jdbc连接HIVESERVICE 创建表

    基于CDH5.x 下面使用eclipse 操作hive .使用java通过jdbc连接HIVESERVICE 创建表 import java.sql.Connection; import java.s ...

  4. java用JDBC连接MySQL数据库的详细知识点

    想实现java用JDBC连接MySQL数据库.需要有几个准备工作: 1.下载Connector/J的库文件,下载Connector/J的官网地址:http://www.mysql.com/downlo ...

  5. JAVA通过JDBC连接Oracle数据库详解【转载】

    JAVA通过JDBC连接Oracle数据库详解 (2011-03-15 00:10:03) 转载▼http://blog.sina.com.cn/s/blog_61da86dd0100q27w.htm ...

  6. Java使用JDBC连接SQL Server数据库|实现学生成绩信息系统

    Java实验四 JDBC 使用SQL Server数据库或者MySQL数据库各自的客户端工具,完成如下任务: (1)创建数据库students: (2)在数据students中创建表scores,包括 ...

  7. Java使用JDBC连接SQL Server数据库

    Java使用JDBC连接SQL Server数据库 1.下载驱动 1.下载Microsoft SQL Server JDBC 驱动程序 https://docs.microsoft.com/zh-cn ...

  8. ava基础MySQL存储过程 Java基础 JDBC连接MySQL数据库

    1.MySQL存储过程   1.1.什么是存储过程 带有逻辑的sql语句:带有流程控制语句(if  while)等等 的sql语句   1.2.存储过程的特点 1)执行效率非常快,存储过程是数据库的服 ...

  9. Java使用JDBC连接MySQL数据库

    1.引用 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写 ...

随机推荐

  1. bignumber.js是一款用于任意精度十进制和非十进制算术的JavaScript库

    安装 npm install bignumber.js 引入 import { BigNumber } from 'bignumber.js' 实例方法 加法:plus 0.1 + 0.2 // 0. ...

  2. cobbler装机系统部署

    1.cobbler安装 [root@linux-node1 ~]# cp /etc/cobbler/settings{,.ori} # 备份 # server,Cobbler服务器的IP. sed - ...

  3. asp.net webApi webconfig配置常见问题

    问题描述 一个项目引用不同版本的同一dll,会引发以下报错: 未能加载文件或程序集“xxx, Version=x.x.x.x, Culture=neutral, PublicKeyToken=xxxx ...

  4. Transposed Convolution 反卷积

    Transposed convolutions也称作fractionally strided convolutions(本人比较喜欢这个称呼,比较直观),Upconvolution,deconvolu ...

  5. contenteditable 光标定位到最后

    在Vue做项目时,做了一个div[contenteditable=true]的组件作为文本输入框 在非手动输入值后,光标会丢失,经测试以下这段代码可用,直接将光标定位到最后 function keep ...

  6. linq 分页

    urList = (from u in urList                      orderby u.toolingNo_C                      select u) ...

  7. sh_03_逻辑运算演练

    sh_03_逻辑运算演练 # 练习1: 定义一个整数变量 age,编写代码判断年龄是否正确 age = 12 # 要求人的年龄在 0-120 之间 """ 10000 a ...

  8. Python3学习笔记(六):字符串

    一.基本字符串操作 所有标准的序列操作(索引.分片.乘法.判断成员资格.求长度.取最小值和最大值)对字符串同样适用.但是字符串是不可改变的. 二.字符串格式化 字符串格式化使用字符串格式化操作符(%) ...

  9. Loadrunner参数化避免重复数据

    1.我们性能测试过程中经常遇到需要创建很多数据来运行测试场景,但是如果数据准备不够多,可能会造成数据不够用,导致场景运行失败,下面简单的例子: 2.我们对用户名分别使用VuserID和lteratio ...

  10. Future 和 CompletableFuture 异步任务 in Java

    Future 异步任务 定义Callable接口的实现 import java.util.concurrent.Callable; public class RealDataCallable impl ...