3

Cloudera Manager を使用したクラスター設定で CDH 4.2.1-1.cdh4.2.1.p0.5 を使用しており、Java で Hive API を使用して Hive の例を動作させようとしています。私が使用しているハイブのバージョンは 0.10 (hive-hwi-0.10.0-cdh4.2.1.jar) で、次の URL の指示に従って簡単な例をセットアップしようとしています: https://cwiki.apache.org/confluence /display/Hive/HiveClient

コード (投稿の最後にあるソース コード) を実行すると、次のエラーが発生します。

Exception in thread "main" java.sql.SQLException: org.apache.thrift.TApplicationException: Invalid method name: 'execute'
    at org.apache.hadoop.hive.jdbc.HiveStatement.executeQuery(HiveStatement.java:191)
    at org.apache.hadoop.hive.jdbc.HiveStatement.execute(HiveStatement.java:127)
    at org.apache.hadoop.hive.jdbc.HiveConnection.configureConnection(HiveConnection.java:126)
    at org.apache.hadoop.hive.jdbc.HiveConnection.<init>(HiveConnection.java:121)
    at org.apache.hadoop.hive.jdbc.HiveDriver.connect(HiveDriver.java:104)
    at java.sql.DriverManager.getConnection(DriverManager.java:579)
    at java.sql.DriverManager.getConnection(DriverManager.java:221)

しばらく Google で検索してきましたが、この問題の解決策が見つかりません。誰でも問題の原因を教えてくれますか?

前もって感謝します、

ロビー



エラーの原因となるコード:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import org.apache.log4j.Logger;

public class HiveJob {

private static Logger mLogger = Logger.getLogger(HiveJob.class);
private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver";

public static void main(String[] args) throws SQLException {
    HiveJob myJob = new HiveJob();
    myJob.execute();
}

public void execute() throws SQLException {
    mLogger.info("Start HiveJob");
    try {
        Class.forName(driverName);
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        System.exit(1);
    }
    Connection con = DriverManager.getConnection("jdbc:hive://myHiveServer:9083/default", "", "");
    Statement stmt = con.createStatement();
    String sql = "SHOW TABLES";
    System.out.println("Running: " + sql);
    ResultSet res = stmt.executeQuery(sql);
    while (res.next()) {
        System.out.println(res.getString(1));
    }
    mLogger.info("HiveJob executed!");
}

}

4

5 に答える 5

1

jdbc urlは、メタストアのデフォルト ポートであるmyHiveServer: 9083 を指します。メタストアがハイブ サーバーと同じthrift apiをサポートしていないため、このエラーが発生しています。hiveserver のホスト + ポート (1 または 2) を指定する必要があります。デフォルトのポートは 10000 です。

于 2013-07-23T18:43:52.490 に答える
1

hive2 の追加とポートの変更だけでは機能しません。同じ問題に遭遇し、Cloudera VM で hive2 サービスを開始する必要があることがわかりました。上記のドライバーを「org.apache.hive.jdbc.HiveDriver」に変更すると、ポートが10000になります。使用していたリンクは古いもので、ハイブは次の名前の同時接続をサポートするように書き直されましたハイブ2。このリンクは、接続のために適切に実行される完璧なコードを提供します。 https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients

于 2013-11-14T17:54:00.187 に答える
0

この問題を解決するには、2 つのことを行う必要があります。

  1. ポート番号を 9083 から 10000 に変更します。Bcz のデフォルトのポート番号は、Hive thrift サーバーの場合は 10000 です...

  2. そして、ハイブリサイクルサーバーを起動するだけです...このように

    $ hive --service hiveserver &

リサイクルサーバーが起動した場合、出力は次のようになります

   $ netstat -nl | grep 10000
     tcp        0      0 0.0.0.0:10000               0.0.0.0:*                   LISTEN
于 2013-11-20T06:07:03.013 に答える