当前位置: 首页 > 文档资料 > Hadoop 中文文档 >

相关软件介绍/Hive/Hive的JDBC连接

优质
小牛编辑
133浏览
2023-12-01

一、环境

Hadoop 0.20.2版本、Hive-0.5.0版本、JDK1.6

二、使用目的

1、一般来说我们对hive的操作都是通过cli来进行,也就是Linux的控制台,但是,这样做本质上是每个连接都存放一个元数据,各个之间都不相同,所以,对于这样的模式我建议是用来做一些测试比较合适,并不适合做产品的开发和应用。

2、因此,就产生的JDBC连接的方式,当然还有其他的连接方式,比如ODBC等。

三、连接的配置

1、修改hive-site.xml

<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <!--表示使用嵌入式的derby,create为true表示自动创建数据库,数据库名为metastore_db-->
  <value>jdbc:derby:;databaseName=metastore_db;create=true</value> 
  <!--表示使用客服模式的derby,hadoopor为数据库名,192.168.0.3为derby服务端的IP地址,而4567为服务端的端口号-->
  <!--<value>jdbc:derby://192.168.0.3:4567/hadoopor;create=true</value>—> 
  <description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
  <name>javax.jdo.option.ConnectionDriverName</name> 
  <value>org.apache.derby.jdbc.EmbeddedDriver</value> 表示使用嵌入式的derby
  <!--<value>org.apache.derby.jdbc.ClientDriver</value>--> 表示使用客服模式的derby
  <description>Driver class name for a JDBC metastore</description>
</property>

2、对于嵌入式的derby要求在hive的lib目录下有文件derby.jar,而对于客服模式的derby要求有derbyclient.jar文件,这个文件需要自己去下载。

3、配置完成之后,输入hive --service hiveserver,可以启动服。

四、实例代码

主要是通过JDBC连接Hive的源代码。

public class HiveJdbcClient {
	private static String driverName = "org.apache.hadoop.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);
		}
		Connection con = DriverManager.getConnection("jdbc:hive://IP:10000/default", "", "");
		Statement stmt = con.createStatement();
		String tableName = "http_test";
		// stmt.executeQuery("drop table " + tableName);
		// ResultSet res = stmt.executeQuery("create table " + tableName + " (key int, value string)");
		// show tables
		String sql = "show tables ";
		System.out.println("Running: " + sql);
		ResultSet res = stmt.executeQuery(sql);
		if (res.next()) {
			System.out.println(res.getString(1));
		}
		// describe table
		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));
		}
		// load data into table
		// NOTE: filepath has to be local to the hive server
		// NOTE: /tmp/a.txt is a ctrl-A separated file with two fields per line
		/**
		 * String filepath = "/tmp/a.txt"; sql = "load data local inpath '" + filepath + "' into table " + tableName;
		 * System.out.println("Running: " + sql); res = stmt.executeQuery(sql);
		 * 
		 * // select * query sql = "select * from " + tableName; System.out.println("Running: " + sql); res =
		 * stmt.executeQuery(sql); while (res.next()) { System.out.println(String.valueOf(res.getInt(1)) + "t" +
		 * res.getString(2)); }
		 * 
		 * // regular hive query sql = "select count(1) from " + tableName; System.out.println("Running: " + sql); res =
		 * stmt.executeQuery(sql); while (res.next()) { System.out.println(res.getString(1)); }
		 */
	}
}



五、总结
1、可以参看一下这个连接:http://bbs.hadoopor.com/thread-219-1-3.html
2、wiki的资料,比较权威的,可以看看:http://wiki.apache.org/hadoop/Hive/HiveClient
3、淘宝也有相关的资料,可以看看:http://www.tbdata.org/archives/499
4、文档比较粗糙,有疑问可以发邮件交流:dajuezhao@gmail.com