Hive JDBC错误:java.lang.NoSuchFieldError:HIVE_CLI_SERVICE_PROTOCOL_V7 [英] Hive JDBC error: java.lang.NoSuchFieldError: HIVE_CLI_SERVICE_PROTOCOL_V7

查看:3244
本文介绍了Hive JDBC错误:java.lang.NoSuchFieldError:HIVE_CLI_SERVICE_PROTOCOL_V7的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图使用Hive2连接器通过JDBC创建到Impala的连接。但是我得到这个错误:

 线程main中的异常java.lang.NoSuchFieldError:HIVE_CLI_SERVICE_PROTOCOL_V7 
at org.apache.hive.jdbc.HiveConnection。< init>(HiveConnection.java:175)
at org.apache.hive.jdbc.HiveDriver.connect(HiveDriver.java:105)
at java .sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:208)
at dsnoc.dsnoc_api.dolar.getDolarFromImpala(dolar.java:145 )
at dsnoc.dsnoc_api.dsnoc.main(dsnoc.java:75)

I不知道它是否存在兼容性问题:

 <依赖关系> 
< groupId> org.apache.hive< / groupId>
< artifactId> hive-exec< / artifactId>
< version> 1.1.0< / version>
< /依赖关系>
< dependency>
< groupId> org.apache.hive< / groupId>
< artifactId> hive-jdbc< / artifactId>
< version> 1.1.0< / version>
< /依赖关系>
< dependency>
< groupId> org.apache.hadoop< / groupId>
< artifactId> hadoop-common< / artifactId>
< version> 2.6.0< / version>
< /依赖关系>

我在Hive 1.1.0和Hadoop 2.6.0中使用CDH 5.8.0



或者可能是代码问题:

  public static double getDolarFromImpala(String date) {
double dolar = 0.0;
尝试{
Class.forName(JDBC_DRIVER_HIVE);
String sql =SELECT valor FROM dolar where fecha ='+ date +';

连接con = DriverManager.getConnection(JDBC_HIVE2_URL,USERNAME,PASSWORD);
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(sql);

while(rs.next()){
dolar = rs.getDouble(valor);
}
stmt.close();
con.close();
}
catch(SQLException se){
//处理JDBC错误
se.printStackTrace();
}
catch(Exception e){
//处理Class.forName
的错误e.printStackTrace();
}
返回dolar;
}

但我认为不是,因为我使用Impala-JDBC进行了尝试, 其他事情是我没有使用Impala-JDBC,因为它不读取或发送 USERNAME PASSWORD ,抛出这个错误:

  [Simba ] [ImpalaJDBCDriver](500051)错误处理查询/语句。错误代码:0,SQL状态:TStatus(statusCode:ERROR_STATUS,sqlState:HY000,errorMessage:AuthorizationException:用户''没有权限执行'SELECT'

问候,

解决方案

试试这个罐子:




  • hive-jdbc-2.1.1-standalone.jar

  • hadoop-common-2.7.3.jar



depencency:

 < dependency> 
< groupId> org.apache.hive< / groupId>
< artifactId> hive-jdbc< / artifactId>
< version> 2.1.1< / version>
< /依赖项>
<依赖项>
< groupId> org.apache.hadoop< / groupId>
< artifactId> hadoop-common< / artifactId>
< version> 2.7.3< / version>
< / dependency>

您可以在这里找到这个罐子: https:// sea rch.maven.org



这个罐子适用于JMeter。


I'm trying to create a connection via JDBC to Impala using the Hive2 connector. But I'm getting this error:

Exception in thread "main" java.lang.NoSuchFieldError: HIVE_CLI_SERVICE_PROTOCOL_V7
      at org.apache.hive.jdbc.HiveConnection.<init>(HiveConnection.java:175)
      at org.apache.hive.jdbc.HiveDriver.connect(HiveDriver.java:105)
      at java.sql.DriverManager.getConnection(DriverManager.java:664)
      at java.sql.DriverManager.getConnection(DriverManager.java:208)
      at dsnoc.dsnoc_api.dolar.getDolarFromImpala(dolar.java:145)
      at dsnoc.dsnoc_api.dsnoc.main(dsnoc.java:75)

I don't know if it is a depencency compatibility issue:

  <dependency>
      <groupId>org.apache.hive</groupId>
      <artifactId>hive-exec</artifactId>
      <version>1.1.0</version>
  </dependency>
  <dependency>
      <groupId>org.apache.hive</groupId>
      <artifactId>hive-jdbc</artifactId>
      <version>1.1.0</version>
  </dependency>
  <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-common</artifactId>
      <version>2.6.0</version>
  </dependency>

I'm using CDH 5.8.0 with Hive 1.1.0 and Hadoop 2.6.0

Or maybe is Code issue:

public static double getDolarFromImpala(String date)  {
    double dolar = 0.0;
    try {
        Class.forName(JDBC_DRIVER_HIVE);
        String sql = "SELECT valor FROM dolar where fecha ='"+date+"'";

        Connection con = DriverManager.getConnection(JDBC_HIVE2_URL,USERNAME,PASSWORD);
        Statement stmt = con.createStatement();
        ResultSet rs = stmt.executeQuery(sql);

        while(rs.next()){
            dolar = rs.getDouble("valor");                                          
        }
        stmt.close();
        con.close();
    }
    catch(SQLException se){
          //Handle errors for JDBC
          se.printStackTrace();
    }
    catch(Exception e){
          //Handle errors for Class.forName
          e.printStackTrace();
    }
    return dolar;
}

But I think is not, because I tried it with an Impala-JDBC and worked.

Other thing is that I'm not using the Impala-JDBC because it don't reads or sends the USERNAME and PASSWORD, throwing me this error:

 [Simba][ImpalaJDBCDriver](500051) ERROR processing query/statement. Error Code: 0, SQL state: TStatus(statusCode:ERROR_STATUS, sqlState:HY000, errorMessage:AuthorizationException: User '' does not have privileges to execute 'SELECT'

Regards,

解决方案

Try this jars:

  • hive-jdbc-2.1.1-standalone.jar
  • hadoop-common-2.7.3.jar

depencency:

<dependency>
    <groupId>org.apache.hive</groupId>
    <artifactId>hive-jdbc</artifactId>
    <version>2.1.1</version>
</dependency>
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-common</artifactId>
    <version>2.7.3</version>
</dependency>

You can find this jars here: https://search.maven.org

This jars working for me in JMeter.

这篇关于Hive JDBC错误:java.lang.NoSuchFieldError:HIVE_CLI_SERVICE_PROTOCOL_V7的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆