仅仅通过./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程序来连接了。

四、写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,密码默认为空,执行结果:

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