一般连接hive的方式有CLI(登录到服务器或者本地切换到hive环境),Client(SQUIREEL SQL客户端),Web UI(hive --service hwi )等
Java 操作JDBC同普通JDBC数据库一样,首先需要启动Hive 服务打开bin/hive --service hiveserver -p 10000
public List<Integer> getDocIds(String reportDate){
List<Integer> docIds = new ArrayList<Integer>();
try {
System.out.println("get apps...");
Class.forName("org.apache.hive.jdbc.HiveDriver");
Connection conn = DriverManager.getConnection("jdbc:hive2://localhost:10000/default", "hadoop", "");
String quary_sql = "use <span style="font-family: Arial, Helvetica, sans-serif;">default</span>";
PreparedStatement stmt = conn.prepareStatement(quary_sql);
stmt.execute(quary_sql);
quary_sql = "select * from t_docid where report_date>=?";
stmt = conn.prepareStatement(quary_sql);
stmt.setString(1, reportDate);
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
docIds.add(rs.getInt(1));
}
return docIds;
}catch (Exception e){
e.printStackTrace();
}
return docIds;
}
依赖的jar:
hadoop-2.2.0/share/hadoop/common/hadoop-common-2.2.0.jar $HIVE_HOME/lib/hive-exec-0.11.0.jar $HIVE_HOME/lib/hive-jdbc-0.11.0.jar $HIVE_HOME/lib/hive-metastore-0.11.0.jar $HIVE_HOME/lib/hive-service-0.11.0.jar $HIVE_HOME/lib/libfb303-0.9.0.jar $HIVE_HOME/lib/commons-logging-1.0.4.jar $HIVE_HOME/lib/slf4j-api-1.6.1.jar或者maven:
<dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-jdbc</artifactId> <version>0.11.0</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>2.2.0</version> </dependency>
如果报错:
org.apache.thrift.TApplicationException: Required field 'client_protocol' is unset! Struct:TOpenSessionReq(client_protocol:null)
则极可能的原因是你项目的hive-jdbc版本和服务器不一致的原因造成的,替换成和服务器一致的版本就可以了,PS:hive前期版本中bug较多,推荐使用最新的版本
参考:http://www.iteblog.com/archives/846