通过JDBC连接Hive Server2
来源:互联网 发布:知乎男朋友 编辑:程序博客网 时间:2024/05/17 20:34
通过JDBC连接Hive Server2,首先要准备好JDBC连接所需要的JAR包。
C:\Program Files\DbVisualizer\jdbc\hive\commons-logging-1.1.3.jarC:\Program Files\DbVisualizer\jdbc\hive\hadoop-common-2.3.0-cdh5.1.3.jarC:\Program Files\DbVisualizer\jdbc\hive\hive-common-0.12.0-cdh5.1.3.jarC:\Program Files\DbVisualizer\jdbc\hive\hive-exec-0.12.0-cdh5.1.3.jarC:\Program Files\DbVisualizer\jdbc\hive\hive-jdbc-0.12.0-cdh5.1.3.jarC:\Program Files\DbVisualizer\jdbc\hive\hive-metastore-0.12.0-cdh5.1.3.jarC:\Program Files\DbVisualizer\jdbc\hive\hive-service-0.12.0-cdh5.1.3.jarC:\Program Files\DbVisualizer\jdbc\hive\libfb303-0.9.0.jarC:\Program Files\DbVisualizer\jdbc\hive\log4j-1.2.16.jarC:\Program Files\DbVisualizer\jdbc\hive\slf4j-api-1.7.5.jarC:\Program Files\DbVisualizer\jdbc\hive\slf4j-log4j12-1.7.5.jarC:\Program Files\DbVisualizer\jdbc\hive\httpclient-4.2.5.jarC:\Program Files\DbVisualizer\jdbc\hive\httpcore-4.2.5.jar
如果没添加最后两个,可能会出现下面的报错
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/HttpRequestInterceptor at org.apache.hive.jdbc.HiveDriver.connect(HiveDriver.java:105) at java.sql.DriverManager.getConnection(DriverManager.java:571) at java.sql.DriverManager.getConnection(DriverManager.java:215) at com.simon.HiveJDBCTest.main(HiveJDBCTest.java:33)Caused by: java.lang.ClassNotFoundException: org.apache.http.HttpRequestInterceptor at java.net.URLClassLoader$1.run(URLClassLoader.java:366) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:425) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:358) ... 4 more
第一步:JDBC连接需要设置好驱动程序,连接url等信息。
private static String driverName = "org.apache.hive.jdbc.HiveDriver";
连接URL
private static String url = "jdbc:hive2://<SERVER_IP>:<THRIFTSEVER2_PORT>/<DATABASE_NAME>";如果需要设置队列private static String url = "jdbc:hive2://<SERVER_IP>:<THRIFTSEVER2_PORT>/<DATABASE_NAME>?mapred.job.queue.name=<QUEUE_NAME>";使用聚集函数private static String url = "jdbc:hive2://<SERVER_IP>:<THRIFTSEVER2_PORT>/<DATABASE_NAME>?mapred.job.queue.name=<QUEUE_NAME>;hive.mapred.mode=nonstrict";
在Apache官方的wiki上,有关于连接URL的详细帮助
The HiveServer2 URL is a string with the following syntax:
jdbc:hive2://<host1>:<port1>,<host2>:<port2>/dbName;initFile=<file>;sess_var_list?hive_conf_list#hive_var_list
where
<host1>: <port1>,<host2>:<port2>
is a server instance or a comma separated list of server instances to connect to (if dynamic service discovery is enabled). If empty, the embedded server will be used.dbName is the name of the initial database.
<file>
is the path of init script file (Hive 2.2.0 and later). This script file is written with SQL statements which will be executed automatically after connection. This option can be empty.hive_conf_list is a semicolon separated list of key=value pairs of Hive configuration variables for this session
hive_var_list is a semicolon separated list of key=value pairs of Hive variables for this session.
说明一下
- 关于多台服务器实例的情况,可以用逗号把服务器分开,前提是
在$HIVE_HOME/conf/hive-site.xml里面配置dynamic.service.discovery
<property> <name>hive.server2.support.dynamic.service.discovery</name> <value>true</value></property>
关于initFile,可以把脚本写到命令里,默认执行这里面的脚本,这个属于Hive2.2.0版本之后的功能
关于hive_conf_list
当URL里面没有hive_conf_list ,也就是格式如下
private static String url = "jdbc:hive2://<SERVER_IP>:<THRIFTSEVER2_PORT>/<DATABASE_NAME>?mapred.job.queue.name=<QUEUE_NAME>;hive.mapred.mode=nonstrict";
代码如下:
conn = DriverManager.getConnection(url, user,password );
- 关于hive_var_list
而当URL里面包含了sess_var_list,如下:
private static String url = "jdbc:hive2://<SERVER_IP>:<THRIFTSEVER2_PORT>/<DATABASE_NAME>;username=username;password=password?mapred.job.queue.name=<QUEUE_NAME>;hive.mapred.mode=nonstrict";
连接代码是
conn = DriverManager.getConnection(url);
第二步:通过反射机制获取驱动程序
try { Class.forName(driverName); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); System.exit(1); }
第三步:建立连接
conn = DriverManager.getConnection(url, user,password);或者是conn = DriverManager.getConnection(url);
第四步:创建statement
stmt = conn.createStatement();
第五步:准备SQL脚本
例如,查看所有的表:sql = "show tables";或者,统计test表有多少记录sql = "select count(1) from test";
第六步:statement执行脚本
res = stmt.executeQuery(sql);
第七步,处理结果集
while(res.next()) { System.out.println(res.getString(1));}
第八步,关闭statement
if (stmt != null) { stmt.close(); stmt = null;}
第九步,关闭连接
if (conn != null) { conn.close(); conn = null;}
注意,关闭statement和connection都要捕捉异常。整个过程可以使用try/catch/finally完成,将关闭异常处理放在finally里面。
详细资料,请使用
参考文档
https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients
- 通过JDBC连接Hive Server2
- jdbc通过hive server2访问hive
- ubuntu16.04+hadoop2.7.2+hive1.2.1 server2通过jdbc连接
- 通过JDBC连接hive
- eclipse通过jdbc连接hive
- Java通过JDBC连接Hive
- 通过JDBC来连接Hive
- java 通过JDBC连接hive
- hive-server2
- java 通过jdbc驱动连接hive操作
- 通过JDBC驱动连接Hive操作实例
- java通过jdbc驱动连接hive
- 通过JDBC驱动连接Hive操作实例
- windows下eclipse通过JDBC连接hive
- hive server2中文乱码
- java 通过jdbc驱动连接hive操作实例
- java 通过jdbc驱动连接hive操作实例
- java 通过jdbc驱动连接hive操作实例
- 关于RelativeLayout的layout_below
- @OneToMany单向一对多
- HashMap分析
- 回环网络接口lo的自己的一点儿认识
- nodejs 读取文件
- 通过JDBC连接Hive Server2
- 说说MyBatis配置文件中${}与#{}的区别
- 安装neutron的防火墙、VPN和负载均衡功能
- Linux MQ配置调优
- 寻找共同好友(hadoop解决方案)
- 欢迎使用CSDN-markdown编辑器
- JVM 性能优化, Part 4: C4 垃圾回收
- 调整坐标刻度
- 那些让人睡不着觉的bug,你有没有遭遇过?