您的位置:首页 > 编程语言 > Java开发

Java JDBC方式连接HIVE2

2015-09-09 13:33 627 查看
一般连接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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: