java通过JDBC驱动连接操作hive实例
2015-10-16 15:27
676 查看
Hive提供了jdbc驱动,使得我们可以用java代码来连接Hive并进行一些类关系型数据库的sql语句查询等操作。首先,我们必须将Hive的服务,也就是HiveServe打开。在Hive 0.11.0版本前,只有HiveServer服务可用,但是HiveServer本身存在很多问题(比如:安全性、并发性等);针对这些问题,Hive-0.11.0版本后提供了一个全新的服务:HiveServer2,这个很好的解决HiveServer存在的安全性、并发性等问题。
两种服务的启动方式基本一样。如下:
启动hiveserver(2)服务后,你就可以通过java代码来连接hiveserver并进行相应的hive操作了。示例代码如下:
上面代码是针对hiveserver的。如果是hiveserver2。那有两处需要修改,具体修改如下:
org.apache.hadoop.hive.jdbc.HiveDriver
改为:
org.apache.hive.jdbc.HiveDriver
jdbc:hive://localhost:10000/default
改为:
jdbc:hive2://localhost:10000/default
其中’localhost’是主机地址,10000是端口后,default是默认的db。
接下来就可以编译、运行上面的代码了。
本人使用的开发环境是linux(centos 7)。没有安装eclipse。所以这里只讲用脚本的方式运行。
1) 首先创建一个文件夹/hive。(本人创建的该文件夹绝对路径:/home/workspace/hive)
2) 在hive下面分别创建三文件夹:src/、classes/、lib/。其中,src保存源码(也就是上面的代码,命名为Hive.java),classes保存编译后的.class文件。lib存放依赖的jar包。
3) 在lib下存放依赖jar包:
4) 编译Hive.java,并保持到/classes目录下:
javac -d ./classes/ ./src/*.java
5) 将/classes/打包成jar,并放在当前路径下(/home/workspace/hive):
6)创建脚本——run.sh,内容如下:
7)给run.sh赋予可执行权限,或直接sourcerun.sh,开始连接hive,并执行代码。如果运行成功,服务端后输出:OK。客户端输出:
至此,整个通过JDBC驱动连接hive并操作的实例就完成了。
注意:
Hive是基于Hadoop的,所以,在连接hive时,务必已经启动了hadoop。具体hadoop的安装启动等,推荐下载阅读
最短路径系列之一从零开始学习Hadoop
此外,如果出现连接
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:Communications link failure。
说明,hive元数据关联的mysql数据库没有启动。
关于hive元数据库的修改,推荐阅读:HIVE完全分布式集群安装过程(元数据库:MySQL)。
其他参考文献:
http://www.aboutyun.com/thread-7461-1-1.html
http://www.aboutyun.com/thread-7083-1-1.html
两种服务的启动方式基本一样。如下:
./bin/hive --service hiveserver ./bin/hive --service hiveserver2
启动hiveserver(2)服务后,你就可以通过java代码来连接hiveserver并进行相应的hive操作了。示例代码如下:
package com.aturbo.hadoop; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class Hive { public static void main(String args[])throws Exception{ Class.forName("org.apache.hadoop.hive.jdbc.HiveDriver"); //String dropSQL = "drop table javabloger"; //String createSQL = "create table javabloger(key int,value string)"; //String insertSQL = "load data local inpath '/home/congcong.ai/hive/kv1.txt'" // + "overwrite into table javabloger"; // String querySQL = "select a.* from javabloger a"; String querySQL = "select * from pokes"; Connection con = DriverManager.getConnection("jdbc:hive://localhost:10000/default", "", ""); Statement stmt = con.createStatement(); //stmt.executeQuery(dropSQL); //stmt.executeQuery(createSQL); //stmt.executeQuery(insertSQL); ResultSet res = stmt.executeQuery(querySQL); while(res.next()){ System.out.println("Result: key:"+res.getString(1) +" –> value:" +res.getString(2)); } } }
上面代码是针对hiveserver的。如果是hiveserver2。那有两处需要修改,具体修改如下:
org.apache.hadoop.hive.jdbc.HiveDriver
改为:
org.apache.hive.jdbc.HiveDriver
jdbc:hive://localhost:10000/default
改为:
jdbc:hive2://localhost:10000/default
其中’localhost’是主机地址,10000是端口后,default是默认的db。
接下来就可以编译、运行上面的代码了。
本人使用的开发环境是linux(centos 7)。没有安装eclipse。所以这里只讲用脚本的方式运行。
1) 首先创建一个文件夹/hive。(本人创建的该文件夹绝对路径:/home/workspace/hive)
2) 在hive下面分别创建三文件夹:src/、classes/、lib/。其中,src保存源码(也就是上面的代码,命名为Hive.java),classes保存编译后的.class文件。lib存放依赖的jar包。
3) 在lib下存放依赖jar包:
4) 编译Hive.java,并保持到/classes目录下:
javac -d ./classes/ ./src/*.java
5) 将/classes/打包成jar,并放在当前路径下(/home/workspace/hive):
[root@localhost hive]# jar cvf hive.jar -C ./classes/ . 已添加清单 正在添加: com/(输入 = 0) (输出 = 0)(存储了 0%) 正在添加: com/aturbo/(输入 = 0) (输出 = 0)(存储了 0%) 正在添加: com/aturbo/hadoop/(输入 = 0) (输出 = 0)(存储了 0%) 正在添加: com/aturbo/hadoop/Hive.class(输入 = 1596) (输出 = 926)(压缩了 41%)
6)创建脚本——run.sh,内容如下:
#!/bin/bash HADOOP_HOME=/home/aturbo/hadoop/hadoop-1.2.1 HIVE_HOME=/home/aturbo/hive/hive.1.2.1 CLASSPATH=$CLASSPATH: for i in /home/workspace/hive/lib/*.jar;do CLASSPATH=$CLASSPATH:$i done echo $CLASSPATH java -cp $CLASSPATH:/home/workspace/hive/hive.jar com.aturbo.hadoop.Hive
7)给run.sh赋予可执行权限,或直接sourcerun.sh,开始连接hive,并执行代码。如果运行成功,服务端后输出:OK。客户端输出:
15/10/16 15:04:23 INFO jdbc.Utils: Supplied authorities: localhost:10000 15/10/16 15:04:23 INFO jdbc.Utils: Resolved authority: localhost:10000 15/10/16 15:04:23 INFO jdbc.HiveConnection: Will try to open client transport with JDBC Uri: jdbc:hive2://localhost:10000/default Result: key:1 –> value:wyp Result: key:2 –> value:test Result: key:3 –> value:zs Result: key:1 –> value:wyp Result: key:2 –> value:test Result: key:3 –> value:zs Result: key:1 –> value:wyp Result: key:2 –> value:test Result: key:3 –> value:zs Result: key:1 –> value:wyp Result: key:2 –> value:test Result: key:3 –> value:zs
至此,整个通过JDBC驱动连接hive并操作的实例就完成了。
注意:
Hive是基于Hadoop的,所以,在连接hive时,务必已经启动了hadoop。具体hadoop的安装启动等,推荐下载阅读
最短路径系列之一从零开始学习Hadoop
此外,如果出现连接
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:Communications link failure。
说明,hive元数据关联的mysql数据库没有启动。
关于hive元数据库的修改,推荐阅读:HIVE完全分布式集群安装过程(元数据库:MySQL)。
其他参考文献:
http://www.aboutyun.com/thread-7461-1-1.html
http://www.aboutyun.com/thread-7083-1-1.html
相关文章推荐
- Java基础知识学习(七)
- java 代理的作用 因素 以及对代理的理解
- 7、struts.xml包含其他其他配置文件(xx.xml)
- 6.在struts.xml中配置默认的action,也就是主页
- 深入详解Struts2——struts.xml配置详解(一)
- OS x yosemite jdk安装路径和环境变量配置
- 性能调优工具:JDK 命令行工具之jstatd
- 网沙(爱玩啥)韩顺平.循序渐进学.java.从入门到精通系列视频分享
- spring 手动控制事务处理
- NET-JAVA 六--------- 匿名类、内部类、
- 从头认识java-1.5 继承(2)
- 从头认识java-1.5 继承(2)
- Eclipse中setter/getter方法自动添加属性注释
- MyEclipse中SVN的使用方法
- NET-JAVA 五
- eclipse下添加GCC编译器的编译链接库以及程序运行参数方法
- JAVA设计模式(6) —<结构型>适配器模式(Adapter)
- Spring3.0核心组件的源码简单分析
- 从0开始学Java——JSP&Servlet——如何部署web应用程序
- java Thread dump