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中使用的端口:
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的更多相关文章
- java通过jdbc连接impala
下载所需jar包:http://www.cloudera.com/downloads/connectors/impala/jdbc/2-5-28.html 选择使用impalajdbc41版本 imp ...
- JAVA使用jdbc连接MYSQL简单示例
以下展示的为JAVA使用jdbc连接MYSQL简单示例: import java.sql.DriverManager; import java.sql.ResultSet; import java.s ...
- 基于CDH5.x 下面使用eclipse 操作hive 。使用java通过jdbc连接HIVESERVICE 创建表
基于CDH5.x 下面使用eclipse 操作hive .使用java通过jdbc连接HIVESERVICE 创建表 import java.sql.Connection; import java.s ...
- java用JDBC连接MySQL数据库的详细知识点
想实现java用JDBC连接MySQL数据库.需要有几个准备工作: 1.下载Connector/J的库文件,下载Connector/J的官网地址:http://www.mysql.com/downlo ...
- JAVA通过JDBC连接Oracle数据库详解【转载】
JAVA通过JDBC连接Oracle数据库详解 (2011-03-15 00:10:03) 转载▼http://blog.sina.com.cn/s/blog_61da86dd0100q27w.htm ...
- Java使用JDBC连接SQL Server数据库|实现学生成绩信息系统
Java实验四 JDBC 使用SQL Server数据库或者MySQL数据库各自的客户端工具,完成如下任务: (1)创建数据库students: (2)在数据students中创建表scores,包括 ...
- Java使用JDBC连接SQL Server数据库
Java使用JDBC连接SQL Server数据库 1.下载驱动 1.下载Microsoft SQL Server JDBC 驱动程序 https://docs.microsoft.com/zh-cn ...
- ava基础MySQL存储过程 Java基础 JDBC连接MySQL数据库
1.MySQL存储过程 1.1.什么是存储过程 带有逻辑的sql语句:带有流程控制语句(if while)等等 的sql语句 1.2.存储过程的特点 1)执行效率非常快,存储过程是数据库的服 ...
- Java使用JDBC连接MySQL数据库
1.引用 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写 ...
随机推荐
- ubuntu apache https设置
上篇文章已经描述过怎么生成证书,点击这里,直接写怎么设置 1.apache加载ssl模块, # a2enmod ssl 2.启动ssl站点 #a2ensite default-ssl 3.加入监听端口 ...
- ROPE
#include <ext/rope> using namespace __gnu_cxx; ]; rope<int> x; rope<int> x(a,a + n ...
- Vue给子组件传值为空
在项目中会遇到的情况.给子组件传值. 子组件页面可以把数据展现出来.可在方法中却获取不到 解决方法: 父组件添加判断,让页面执行完.再把值带过去.
- Jenkins打包Maven项目
Jenkins是一个用于持续集成的服务,简单些说,就是提交代码后,点一下(也可以设置自动检测),系统会自动下载你的代码并编译,然后复制或上传到指定位置,并给所有相关人发送邮件. 一.环境搭建 1.下载 ...
- jvm——class类文件的结构
class类文件并不一定以磁盘的形式存在,也可以是由类加载器直接生成的二进制流,他其实是一种数据结构,类似于c语言结构体,这种数据结构只有两种数据类型:无符号数和表. 1.魔数:类似于文件拓展名,CA ...
- shell练习--PAT题目1008:数组元素循环右移问题 (失败案例,运行超时)
一个数组A中存有N(>)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥)个位置,即将A中的数据由(A0A1⋯AN−1)变换为(AN−M⋯AN−1A ...
- tomcat7 与tomcat8 使用tomcat dbcp pool注意对应类变化
tomcat dbcp pool在tomcat 7 和tomcat8下的jar包有变化,相应包名也发生变化,对应类名有相应变化! tomcat的lib文件夹下会有jar包tomcat-dbcp.jar ...
- 常用深度学习框架(keras,pytorch.cntk,theano)conda 安装--未整理
版本查询 cpu tensorflow conda env list source activate tensorflow python import tensorflow as tf 和 tf.__ ...
- 使用Swagger自动生成文档
1.maven依赖 maven仓库(https://mvnrepository.com/)搜索springfox <!-- https://mvnrepository.com/artifact/ ...
- MongoDB操作:flush()
flush() 是把缓冲区的数据强行输出,(注意不要和frush()刷新混淆了). 主要用在IO中,即清空缓冲区数据,一般在读写流(stream)的时候,数据是先被读到了内存中,再把数据写到文件中,当 ...