java链接Hive与Impala经验总结
2015-07-03 10:54
573 查看
首先我是使用cloudera-manager安装的CDH5.4.1
之后我运行了hive ,hbase shell,impala-shell都是好用的。
接下来我试试用JAVA去访问hive ,impala服务
首先是java链接impala
但是要注意的是,你工程里要有hive的JDBC驱动,我把服务器的这个路径下hive开头的所有包都放到工程里了
/opt/cloudera/parcels/CDH-5.4.1-1.cdh5.4.1.p0.6/jars
接下来是JAVA链接IMPALA的代码
网上搜的,换成我自己的服务器IP后是可用的
但是我发现他的链接是jdbc:hive2开头的,这让我产生了疑问,我到底连的是hive还是impala?
然后我在网上搜索java链接hive的程序,发现
网上大多使用了org.apache.hadoop.hive.jdbc.HiveDriver而上边我们使用的是org.apache.hive.jdbc.HiveDriver
这2个类名一样,但是包不一样,我一开始认为这就是连hive跟impala的区别?
最后我发现其实不是org.apache.hadoop.hive.jdbc.HiveDriver应该是hadoop1.X的类。而到了hadoop2.X里好像已经换成org.apache.hive.jdbc.HiveDriver了
于是我又搜了一下最近的链接hive的代码发现确实使用的是org.apache.hive.jdbc.HiveDriver
接下来是代码
package test;
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.DriverManager;
/**
* 测试hive 的客户端连接
* @author alexxiyang (https://github.com/alexxiyang)
*
*/
public class HiveJdbcCli {
/**
* 注意:hive-server2 引用的driver是 org.apache.hive.* 而 hive-server 是 org.apache.hadoop.hive.*
*/
private static String driverName = "org.apache.hive.jdbc.HiveDriver";
/**
* @param args
* @throws SQLException
*/
public static void main(String[] args) throws SQLException {
try {
Class.forName(driverName);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.exit(1);
}
//hive的默认端口是 10000,如果要修改就修改 hive-site.xml 文件的hive.server2.thrift.port 属性值
//默认用户名hive,默认密码为空
Connection con = DriverManager.getConnection("jdbc:hive2://10.10.92.151:10000/default", "hive", "");
Statement stmt = con.createStatement();
//测试的表名 testhivedrivertable
String tableName = "ccc";
//如果已经存在就删除
// stmt.execute("drop table if exists " + tableName);
//创建这张表
// stmt.execute("create table " + tableName + " (key int, value string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\054'");
//看下创建是否成功
// String sql = "show tables '" + tableName + "'";
//// System.out.println("Running: " + sql);
// ResultSet res = stmt.executeQuery(sql);
// if (res.next()) {
// System.out.println(res.getString(1));
// }
//
// //看下表结构
// sql = "describe " + tableName;
// System.out.println("Running: " + sql);
// res = stmt.executeQuery(sql);
// while (res.next()) {
// System.out.println(res.getString(1) + "\t" + res.getString(2));
// }
//
// // 加载数据到表里面
// // NOTE: filepath 是本地文件所在的位置,注意这个本地不是你的电脑!
// // 你得先把这个文件上传到服务器,然后这里的路径是服务器上这个文件的路径
// // NOTE: /data/a.txt
// String filepath = "/data/a.txt";
// sql = "load data local inpath '" + filepath + "' into table " + tableName;
// System.out.println("Running: " + sql);
// stmt.execute(sql);
//
// select * query
String sql = "select * from " + tableName;
System.out.println("Running: " + sql);
ResultSet res = stmt.executeQuery(sql);
while (res.next()) {
System.out.println(String.valueOf(res.getInt(1)) + "\t" + res.getString(2));
}
}
}
我只测试了查询,这里也是好用的,那么区别就来了
两个链接都是jdbc:hive2开头的,区别就在于服务的端口,
我进入cloudera-manager的管理页面里,点击hive查看配置发现我链接hive的服务端口配置为
HiveServer2 端口
hive.server2.thrift.port 值是10000
那么可以得出结论JDBD链接hive其实是访问的hive的thrift服务,端口为10000
而Impala链接的是
Impala Daemon HiveServer2 端口
hs2_port 值为21050
其他基本都差不多,以上是我在学习的时候一点点总结
之后我运行了hive ,hbase shell,impala-shell都是好用的。
接下来我试试用JAVA去访问hive ,impala服务
首先是java链接impala
但是要注意的是,你工程里要有hive的JDBC驱动,我把服务器的这个路径下hive开头的所有包都放到工程里了
/opt/cloudera/parcels/CDH-5.4.1-1.cdh5.4.1.p0.6/jars
接下来是JAVA链接IMPALA的代码
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class ClouderaImpalaJdbcExample { // here is an example query based on one of the Hue Beeswax sample tables private static final String SQL_STATEMENT = "SELECT * FROM hbase_table_1"; // set the impalad host private static final String IMPALAD_HOST = "10.10.92.151"; // port 21050 is the default impalad JDBC port private static final String IMPALAD_JDBC_PORT = "21050"; private static final String CONNECTION_URL = "jdbc:hive2://" + IMPALAD_HOST + ':' + IMPALAD_JDBC_PORT + "/;auth=noSasl"; private static final String JDBC_DRIVER_NAME = "org.apache.hive.jdbc.HiveDriver"; public static void main(String[] args) { System.out.println("\n============================================="); System.out.println("Cloudera Impala JDBC Example"); System.out.println("Using Connection URL: " + CONNECTION_URL); System.out.println("Running Query: " + SQL_STATEMENT); Connection con = null; try { Class.forName(JDBC_DRIVER_NAME); con = DriverManager.getConnection(CONNECTION_URL); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(SQL_STATEMENT); System.out.println("\n== Begin Query Results ======================"); // print the results to the console while (rs.next()) { // the example query returns one String column System.out.print(rs.getString("key")+":"); System.out.println(rs.getString("value")); } System.out.println("== End Query Results =======================\n\n"); } catch (SQLException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } finally { try { con.close(); } catch (Exception e) { // swallow } } } }
网上搜的,换成我自己的服务器IP后是可用的
但是我发现他的链接是jdbc:hive2开头的,这让我产生了疑问,我到底连的是hive还是impala?
然后我在网上搜索java链接hive的程序,发现
网上大多使用了org.apache.hadoop.hive.jdbc.HiveDriver而上边我们使用的是org.apache.hive.jdbc.HiveDriver
这2个类名一样,但是包不一样,我一开始认为这就是连hive跟impala的区别?
最后我发现其实不是org.apache.hadoop.hive.jdbc.HiveDriver应该是hadoop1.X的类。而到了hadoop2.X里好像已经换成org.apache.hive.jdbc.HiveDriver了
于是我又搜了一下最近的链接hive的代码发现确实使用的是org.apache.hive.jdbc.HiveDriver
接下来是代码
package test;
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.DriverManager;
/**
* 测试hive 的客户端连接
* @author alexxiyang (https://github.com/alexxiyang)
*
*/
public class HiveJdbcCli {
/**
* 注意:hive-server2 引用的driver是 org.apache.hive.* 而 hive-server 是 org.apache.hadoop.hive.*
*/
private static String driverName = "org.apache.hive.jdbc.HiveDriver";
/**
* @param args
* @throws SQLException
*/
public static void main(String[] args) throws SQLException {
try {
Class.forName(driverName);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.exit(1);
}
//hive的默认端口是 10000,如果要修改就修改 hive-site.xml 文件的hive.server2.thrift.port 属性值
//默认用户名hive,默认密码为空
Connection con = DriverManager.getConnection("jdbc:hive2://10.10.92.151:10000/default", "hive", "");
Statement stmt = con.createStatement();
//测试的表名 testhivedrivertable
String tableName = "ccc";
//如果已经存在就删除
// stmt.execute("drop table if exists " + tableName);
//创建这张表
// stmt.execute("create table " + tableName + " (key int, value string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\054'");
//看下创建是否成功
// String sql = "show tables '" + tableName + "'";
//// System.out.println("Running: " + sql);
// ResultSet res = stmt.executeQuery(sql);
// if (res.next()) {
// System.out.println(res.getString(1));
// }
//
// //看下表结构
// sql = "describe " + tableName;
// System.out.println("Running: " + sql);
// res = stmt.executeQuery(sql);
// while (res.next()) {
// System.out.println(res.getString(1) + "\t" + res.getString(2));
// }
//
// // 加载数据到表里面
// // NOTE: filepath 是本地文件所在的位置,注意这个本地不是你的电脑!
// // 你得先把这个文件上传到服务器,然后这里的路径是服务器上这个文件的路径
// // NOTE: /data/a.txt
// String filepath = "/data/a.txt";
// sql = "load data local inpath '" + filepath + "' into table " + tableName;
// System.out.println("Running: " + sql);
// stmt.execute(sql);
//
// select * query
String sql = "select * from " + tableName;
System.out.println("Running: " + sql);
ResultSet res = stmt.executeQuery(sql);
while (res.next()) {
System.out.println(String.valueOf(res.getInt(1)) + "\t" + res.getString(2));
}
}
}
我只测试了查询,这里也是好用的,那么区别就来了
两个链接都是jdbc:hive2开头的,区别就在于服务的端口,
我进入cloudera-manager的管理页面里,点击hive查看配置发现我链接hive的服务端口配置为
HiveServer2 端口
hive.server2.thrift.port 值是10000
那么可以得出结论JDBD链接hive其实是访问的hive的thrift服务,端口为10000
而Impala链接的是
Impala Daemon HiveServer2 端口
hs2_port 值为21050
其他基本都差不多,以上是我在学习的时候一点点总结
相关文章推荐
- java中如何判断一个字符是中文字符
- Java集合总结(二)
- Java Web返回JSON
- java中的引用类型概念
- Spring AOP切面
- Java学习遇到的问题
- 学习 java命令
- java并发的处理方式
- Java集合总结(一)
- Struts开发所遇问题之Unknown tag (s:form).
- java堆栈区别(个人理解)
- 配置SpringMVC返回JSON遇到的坑
- 错误解决:There is no getter for property named 'id' in class 'java.lang.String'
- 《Java程序实习》日记(周一)
- Java中final关键字,抽象类与接口
- spring事务管理几种方式
- eclipse转android studio必看。
- Java学习笔记十(注解)
- Spring之AOP实现面向切面编程
- xcode和eclipse常用快捷键