java连接hive1.2.2执行hive sql

仅仅通过./hive启动hive1.2.2的话,hive本质上就相当于hdfs的一个客户端,本身并不是一个服务,如果想要通过java代码以jdbc的方式去连接hive,那么首先要解决的是把hive变成服务器上的一个服务。

以jdbc方式连接hive的步骤:

一、以./hive --service hiveserver2的方式启动hive

[root@node113 /usr/local/hive/apache-hive-1.2.2-bin/bin]#./hive --service hiveserver2

hive会卡在这里,另开一个窗口,hive如果作为服务启动的话,默认占用10000端口:

[root@node113 ~]#netstat -tunpl|grep 10000
tcp        0      0 0.0.0.0:10000           0.0.0.0:*               LISTEN      31627/java

在以前老的版本里面绑定的是127.0.0.1:10000,需要修改

 <property>
    <name>hive.server2.thrift.bind.host</name>
    <value>localhost</value>
    <description>Bind host on which to run the HiveServer2 Thrift service.</description>
  </property>

里面的localhost为node113(hive所在机器的hostname),现在hive1.2.2不需要修改了这个配置了,现在hive1.2.2的这个配置默认是

 <property>
    <name>hive.server2.thrift.bind.host</name>
    <value/>
    <description>Bind host on which to run the HiveServer2 Thrift service.</description>
  </property>

可以不用修改。

二、beeline是hive用来让你连接hive服务的脚本,运行命令  ./beeline 进入交互式

[root@node113 /usr/local/hive/apache-hive-1.2.2-bin/bin]#./beeline 
Beeline version 1.2.2 by Apache Hive
beeline>

三、尝试使用命令  "!connect jdbc:hive2://node113:10000/lzzcmsdb"连接hive:

beeline> !connect jdbc:hive2://node113:10000/lzzcmsdb
Connecting to jdbc:hive2://node113:10000/lzzcmsdb
Enter username for jdbc:hive2://node113:10000/lzzcmsdb: root
Enter password for jdbc:hive2://node113:10000/lzzcmsdb: 
Connected to: Apache Hive (version 1.2.2)
Driver: Hive JDBC (version 1.2.2)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://node113:10000/lzzcmsdb>

上面让你输入hive服务的username和password,hive作为服务启动后,默认的username和password分别为"root"和""(空字符串),从上面可以看到我们通过beeline客户端已经可以连接hive服务了,可以放心的写java程序来连接了。

image.png

四、写jdbc代码:

package hadoop.hive;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import org.junit.Test;

/*
 * 导入hadoop安装包里面的jar包+hive安装包里面的jar
 */
public class TestHive {
	@Test
	public void testHive1() throws Exception{
		Class.forName("org.apache.hive.jdbc.HiveDriver");
		Connection conn=DriverManager.getConnection("jdbc:hive2://node113:10000/lzzcmsdb",
				"root","");
		String sql="select count(*) from t_searchword";
		PreparedStatement ps=conn.prepareStatement(sql);
		ResultSet rs = ps.executeQuery();
		while(rs.next()){
			System.out.println(rs.getInt(1));
		}
		rs.close();
		ps.close();
		conn.close();
	}
}

注意:hive服务的端口是10000,用户名默认是root,密码默认为空,执行结果:

image.png


版权声明:本文为xiaozhuangyumaotao原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。