【问题标题】:JDBC to hive connection fails on invalid operation isValid()JDBC 到 Hive 的连接因无效操作 isValid() 而失败
【发布时间】:2015-11-30 10:00:05
【问题描述】:

我已关注this doc 尝试建立与 hive 的 jdbc 连接。但是eclipse显示了这个错误。似乎没有弄清楚它的确切含义,并且与适当的密码和用户名的连接在直线中工作,所以它不是身份验证的问题。以下是我面临的错误:

> 15/11/27 13:15:41 INFO jdbc.Utils: Supplied authorities: localhost:10000
> 15/11/27 13:15:41 INFO jdbc.Utils: Resolved authority: localhost:10000
> 15/11/27 13:15:41 INFO jdbc.HiveConnection: Will try to open client transport with JDBC Uri: jdbc:hive2://localhost:10000/default
> Exception in thread "main" java.sql.SQLException: Method not supported
    at org.apache.hive.jdbc.HiveConnection.isValid(HiveConnection.java:1026)
    at HiveJDBC.main(HiveJDBC.java:21)

代码如下:

import java.sql.SQLException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.DriverManager;

public class HiveJDBC {
  private static String driverName = "org.apache.hive.jdbc.HiveDriver";

  public static void main(String[] args) throws SQLException {
    try {
      Class.forName(driverName);

    } catch (ClassNotFoundException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      System.exit(1);
    }
    Connection con = DriverManager.getConnection("jdbc:hive2://localhost:10000/default", "hive", "PASSWORD");
    if(con.isValid(0)){
        System.out.println("success");
    }else{
        System.out.println("fail");
    }

    Statement stmt = con.createStatement();
    String tableName = "tabledriver";
    //stmt.executeQuery("create database " + tableName);

  }
}

【问题讨论】:

  • 两者相同。 "org.apache.hive.jdbc.HiveDriver"
  • 我从已安装的 hive 库中引用了相同的 hive-jdbc-1.2.1.jar,所以它与 beeline 使用的相同,如果我没有错的话.. beeline 会有所不同?如何检查直线使用的罐子..

标签: java eclipse hadoop jdbc hive


【解决方案1】:

您的来电

if(con.isValid(0)){

是合法 - 但不是由 Hive JDBC 驱动程序实施。

见Hive Source:

@Override
public boolean isValid(int timeout) throws SQLException {
  // TODO Auto-generated method stub
  throw new SQLException("Method not supported");
}

用一个简单的if(con != null) 替换支票就可以了。

【讨论】:

  • 非常感谢!它起作用了..我想我采取了这一行“0值表示超时未应用于数据库操作。”以错误的方式。你能告诉我这是什么意思吗?有人提到,如果超时小于 0,则会抛出 sql-exception
  • 你没有做错任何事。您刚刚在 java.sql.Connection 中遇到了一个很少使用的方法(没有经常看到它),因此 Hive 开发人员显然选择根本不实现它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多