eclipse 远程操作HIVE

首先启动HiveServer

hive --service hiveserver 10000 &  

创建工程

引入包:


代码(简单的查询):

package com.hive.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class HiveJDBC {

	public static void main(String[] args) {
        try {
            Class.forName("org.apache.hadoop.hive.jdbc.HiveDriver");
            // 查询语句
            String querySQL = "SELECT * FROM t_rp";
            // 链接hive
            Connection con = DriverManager.getConnection("jdbc:hive://192.168.0.100:10000/default", "hive", "hive");
            Statement stmt = con.createStatement();
            // 执行查询语句
            ResultSet res = stmt.executeQuery(querySQL);
            while (res.next()) {
                System.out.println("Result: key:" + res.getString(1) + "  –>  value:" + res.getString(2));
            }
            stmt.close();
            con.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


}

上面是用Java连接HiveServer,而HiveServer本身存在很多问题(比如:安全性、并发性等);针对这些问题,Hive0.11.0版本提供了一个全新的服务:HiveServer2,这个很好的解决HiveServer存在的安全性、并发性等问题。这个服务启动程序在${HIVE_HOME}/bin/hiveserver2里面,你可以通过下面的方式来启动HiveServer2服务:

1
$HIVE_HOME/bin/hiveserver2

也可以通过下面的方式启动HiveServer2

1
$HIVE_HOME/bin/hive --service hiveserver2

两种方式效果都一样的。但是以前的程序需要修改两个地方,如下所示:

privatestatic String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver";
改为
privatestatic String driverName = "org.apache.hive.jdbc.HiveDriver";
 
 
 
Connection con = DriverManager.getConnection(
                           "jdbc:hive://localhost:10002/default","wyp","");
改为
Connection con = DriverManager.getConnection(
                           "jdbc:hive2://localhost:10002/default","wyp","");

其他的不变就可以了。
这里顺便说说本程序所依赖的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>

hive-site.xml 文件中设置以下配置:

<property>  
  <name>hive.server2.thrift.port</name>  
  <value>10000</value>  
</property>  
<property>  
  <name>hive.server2.thrift.bind.host</name>  
  <value>c1</value>  
</property>
异常问题:
 FAILED: RuntimeException org.apache.hadoop.security.AccessControlException: Permission denied: user=hive, access=EXECUTE, inode="/tmp":root:supergroup:drwx------
解决:
改为root用户就行了。

版权声明:本文为博主原创文章,未经博主允许不得转载。

原文地址:https://www.cnblogs.com/jamesf/p/4751559.html