Eclipse JDBC连接Hive 两种方法 hiveserver hiveserver2
2016-03-31 17:20
701 查看
环境:CentOS 6.5, Hadoop2.5.1, Hive0.13.1, 使用mysql作为元数据库
安装Hadoop、Hive的过程就不说了,网上一大堆
Build Path->Configure Build Path->Libraries,将下列jar包添加到项目中:
$HIVE_HOME/lib下的全部jar包和
/hadoop-2.5.1/share/hadoop/common下所有jar包,及里面的lib目录下所有jar包
/hadoop-2.5.1/share/hadoop/hdfs下所有jar包,不包括里面lib下的jar包
/hadoop-2.5.1/share/hadoop/mapreduce下所有jar包,不包括里面lib下的jar包
/hadoop-2.5.1/share/hadoop/yarn下所有jar包,不包括里面lib下的jar包
Eclipse的环境配置好了,下面说连接方法。
有两种连接方法,第一种是hiveserver,第二种是hiveserver2。我最开始是照着hiveserver的方法连接的,但是有问题,具体什么问题下面会说。
注意:
用户名test,密码123,是管理hadoop的用户。
之前用的是mysql的用户,show tables的时候不会报错,但是select的时候会报错:
java.sql.SQLException: Error while compiling statement: FAILED: RuntimeException Cannot make directory: hdfs://master:9000/tmp/hive-qs714/hive_2016-04-04_21-08-08_931_5820120042748761956-5无权限创建目录,修改为管理hadoop的用户和密码
2.源代码:
没有查到表,但是,下图可以看到我的qsjs2016数据库中是有表的。说明查看的是默认数据库default,并没有查qsjs2016这个数据库。url中添加的数据库名没有起作用。
至于为什么会这样我不清楚,网上查了半天并没有查到类似的情况。不过在解决问题的过程中,我发现了hiveserver2的连接,试了一下,问题解决了。
2.源代码,注意驱动要改,url也要改:
3.执行结果:
至于为什么用hiveserver不能使用指定的数据库的原因我还不清楚,如果有懂的大神麻烦解答一下。
我觉得应该是hive版本的问题,因为hive的bin目录下有hiveserver2但是没有hiveserver
安装Hadoop、Hive的过程就不说了,网上一大堆
Eclipse创建项目
创建java项目:HiveJdbcClientBuild Path->Configure Build Path->Libraries,将下列jar包添加到项目中:
$HIVE_HOME/lib下的全部jar包和
/hadoop-2.5.1/share/hadoop/common下所有jar包,及里面的lib目录下所有jar包
/hadoop-2.5.1/share/hadoop/hdfs下所有jar包,不包括里面lib下的jar包
/hadoop-2.5.1/share/hadoop/mapreduce下所有jar包,不包括里面lib下的jar包
/hadoop-2.5.1/share/hadoop/yarn下所有jar包,不包括里面lib下的jar包
Eclipse的环境配置好了,下面说连接方法。
有两种连接方法,第一种是hiveserver,第二种是hiveserver2。我最开始是照着hiveserver的方法连接的,但是有问题,具体什么问题下面会说。
注意:
用户名test,密码123,是管理hadoop的用户。
之前用的是mysql的用户,show tables的时候不会报错,但是select的时候会报错:
java.sql.SQLException: Error while compiling statement: FAILED: RuntimeException Cannot make directory: hdfs://master:9000/tmp/hive-qs714/hive_2016-04-04_21-08-08_931_5820120042748761956-5无权限创建目录,修改为管理hadoop的用户和密码
连接方法1:hiveserver
1.hive开启端口监听用户的连接:hive --service hiveserver2.源代码:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import org.apache.log4j.Logger; public class HiveJdbcClient { private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver"; private static String url = "jdbc:hive://192.168.69.69:10000/qsjs2016"; private static String user = "test"; private static String password = "123"; private static String sql; private static ResultSet res; private static final Logger log = Logger.getLogger(HiveJdbcClient.class); public static void main(String[] args) { try { Class.forName(driverName); Connection conn = DriverManager.getConnection(url, user, password); // 默认使用端口10000, 使用数据库qsjs2016,用户名为test,密码为123 // Connection conn = DriverManager.getConnection( // "jdbc:hive://192.168.69.69:10000/qsjs2016", "test", // "123"); Statement stmt = conn.createStatement(); sql = "show tables";//显示全部表 System.out.println("Running:" + sql); res = stmt.executeQuery(sql); System.out.println("执行结果:"); while (res.next()) { System.out.println(res.getString(1)); } conn.close(); conn = null; } catch (ClassNotFoundException e) { e.printStackTrace(); log.error(driverName + " not found!", e); System.exit(1); } catch (SQLException e) { e.printStackTrace(); log.error("Connection error!", e); System.exit(1); } } }3.run on hadoop,执行结果:
没有查到表,但是,下图可以看到我的qsjs2016数据库中是有表的。说明查看的是默认数据库default,并没有查qsjs2016这个数据库。url中添加的数据库名没有起作用。
至于为什么会这样我不清楚,网上查了半天并没有查到类似的情况。不过在解决问题的过程中,我发现了hiveserver2的连接,试了一下,问题解决了。
连接方法2:hiveserver2
1.开启hiveserver2:hive --service hiveserver22.源代码,注意驱动要改,url也要改:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import org.apache.log4j.Logger; public class HiveJdbcClient { //private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver"; private static String driverName = "org.apache.hive.jdbc.HiveDriver"; private static String url = "jdbc:hive2://192.168.69.69:10000/qsjs2016"; private static String user = "test"; private static String password = "123"; private static String sql; private static ResultSet res; private static final Logger log = Logger.getLogger(HiveJdbcClient.class); public static void main(String[] args) { try { Class.forName(driverName); Connection conn = DriverManager.getConnection(url, user, password); // 默认使用端口10000, <span style="font-family: Arial, Helvetica, sans-serif;">使用数据库qsjs2016,用户名为test,密码为123</span> // Connection conn = DriverManager.getConnection( // "jdbc:hive://192.168.69.69:10000/qsjs2016", "test", // "123"); Statement stmt = conn.createStatement(); sql = "show tables";//显示全部表 System.out.println("Running:" + sql); res = stmt.executeQuery(sql); System.out.println("执行结果:"); while (res.next()) { System.out.println(res.getString(1)); } conn.close(); conn = null; } catch (ClassNotFoundException e) { e.printStackTrace(); log.error(driverName + " not found!", e); System.exit(1); } catch (SQLException e) { e.printStackTrace(); log.error("Connection error!", e); System.exit(1); } } }
3.执行结果:
至于为什么用hiveserver不能使用指定的数据库的原因我还不清楚,如果有懂的大神麻烦解答一下。
我觉得应该是hive版本的问题,因为hive的bin目录下有hiveserver2但是没有hiveserver
相关文章推荐
- jdbc中的Statement和PreparedStatement接口对象
- 详解HDFS Short Circuit Local Reads
- Hadoop_2.1.0 MapReduce序列图
- 使用Hadoop搭建现代电信企业架构
- 分享Hive的一份胶片资料
- MyEclipse Web Project转Eclipse Dynamic Web Project
- Windows Clang开发环境备忘
- 单机版搭建Hadoop环境图文教程详解
- Hadoop生态上几个技术的关系与区别:hive、pig、hbase 关系与区别
- 傻瓜式用Eclipse连接MySQL数据库
- JDBC 数据库常用连接 链接字符串
- hadoop常见错误以及处理方法详解
- Eclipse引入jquery报错如何解决
- 让Flex Builder 3.0与Eclipse3.4整合起来
- Eclipse配置Javascript开发环境图文教程
- 使用zend studio for eclipse不能激活代码提示功能的解决办法
- JDBC连接Access数据库的几种方式介绍
- 图解Eclipse j2ee开发环境的搭建过程
- 两种Eclipse部署动态web项目方法
- JDBC程序更新数据库中记录的方法