Hadoop的版本繁多,一旦版本不对Hive的连接和操作可能会报各种各样的错误,这个时候需要用到上一篇博文提到的Maven来管理这些lib。
Hadoop以及Hive的版本查看:
hadoop version hive --version
pom的配置如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.coinidea</groupId> <artifactId>hive </artifactId> <packaging>war</packaging> <version>1.0-SNAPSHOT</version> <name>hive.web Maven Webapp</name> <url>http://maven.apache.org</url> <properties> <hadoop.version>2.5.0-cdh5.3.2</hadoop.version> <hive.version>0.13.1-cdh5.3.2</hive.version> </properties> <dependencies> <!--hadoop和hive--> <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-jdbc</artifactId> <version>${hive.version}</version> </dependency> <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-common</artifactId> <version>${hive.version}</version> </dependency> <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-exec</artifactId> <version>${hive.version}</version> </dependency> <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-metastore</artifactId> <version>${hive.version}</version> </dependency> <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-service</artifactId> <version>${hive.version}</version> </dependency></p> <pre><code>&lt;dependency&gt; &lt;groupId&gt;org.apache.hadoop&lt;/groupId&gt; &lt;artifactId&gt;hadoop-common&lt;/artifactId&gt; &lt;version&gt;${hadoop.version}&lt;/version&gt; &lt;exclusions&gt; &lt;exclusion&gt; &lt;groupId&gt;org.mortbay.jetty&lt;/groupId&gt; &lt;artifactId&gt;jetty&lt;/artifactId&gt; &lt;/exclusion&gt; &lt;exclusion&gt; &lt;groupId&gt;org.mortbay.jetty&lt;/groupId&gt; &lt;artifactId&gt;jetty-util&lt;/artifactId&gt; &lt;/exclusion&gt; &lt;exclusion&gt; &lt;groupId&gt;org.mortbay.jetty&lt;/groupId&gt; &lt;artifactId&gt;jsp-2.1&lt;/artifactId&gt; &lt;/exclusion&gt; &lt;exclusion&gt; &lt;groupId&gt;org.mortbay.jetty&lt;/groupId&gt; &lt;artifactId&gt;jsp-api-2.1&lt;/artifactId&gt; &lt;/exclusion&gt; &lt;exclusion&gt; &lt;groupId&gt;org.mortbay.jetty&lt;/groupId&gt; &lt;artifactId&gt;servlet-api-2.1&lt;/artifactId&gt; &lt;/exclusion&gt; &lt;exclusion&gt; &lt;groupId&gt;javax.servlet&lt;/groupId&gt; &lt;artifactId&gt;servlet-api&lt;/artifactId&gt; &lt;/exclusion&gt; &lt;exclusion&gt; &lt;groupId&gt;javax.servlet.jsp&lt;/groupId&gt; &lt;artifactId&gt;jsp-api&lt;/artifactId&gt; &lt;/exclusion&gt; &lt;!--tomcat7中自带jasper.jar--&gt; &lt;exclusion&gt; &lt;groupId&gt;tomcat&lt;/groupId&gt; &lt;artifactId&gt;jasper-compiler&lt;/artifactId&gt; &lt;/exclusion&gt; &lt;exclusion&gt; &lt;groupId&gt;tomcat&lt;/groupId&gt; &lt;artifactId&gt;jasper-runtime&lt;/artifactId&gt; &lt;/exclusion&gt; &lt;/exclusions&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;cglib&lt;/groupId&gt; &lt;artifactId&gt;cglib-nodep&lt;/artifactId&gt; &lt;version&gt;2.2.2&lt;/version&gt; &lt;/dependency&gt; </code></pre> <p></dependencies> <build> <finalName>hive </finalName> </build> <repositories> <repository> <id>cloudera</id> <url>https://repository.cloudera.com/artifactory/cloudera-repos</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> <repository> <id>people.apache.snapshots</id> <url>http://repository.apache.org/content/groups/snapshots-group/</url> <releases> <enabled>false</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> </project>
新建HiveTest.java
package com.coinidea;</p> <p>import java.sql.*; public class HiveTest { /* Start server: hive --service hiveserver2 --hiveconf hive.server2.thrift.port=10000 */ private static String driverName = "org.apache.hive.jdbc.HiveDriver";</p> <pre><code>/** * @param args * @throws SQLException */ public static void main(String[] args) throws SQLException { try { Class.forName(driverName); } catch (ClassNotFoundException e) { e.printStackTrace(); System.exit(1); } //replace &quot;hive&quot; here with the name of the user the queries should run as Connection con = DriverManager.getConnection(&quot;jdbc:hive2://192.168.*.*:10000/default&quot;, &quot;hive&quot;, &quot;hive&quot;); Statement stmt = con.createStatement(); String table_user = &quot;test.user&quot;; String user_sql = &quot;select uri from &quot; + table_user + &quot; limit 10&quot;; System.out.println(&quot;Running: &quot; + user_sql); ResultSet users = stmt.executeQuery(user_sql); while (users.next()) { System.out.println(&quot;USER:&quot;+users.getString(1)); } stmt.close(); } </code></pre> <p>}
运行HiveTest之前,需要启动HiveServer2
hive --service hiveserver2 --hiveconf hive.server2.thrift.port=10000