5

ハイブ JDBC チュートリアルに従っています。私はそれを働かせることができませんでした。接続を取得しようとすると、ハングします。エラーも報告されません。Hive サーバーが実行されていると確信しています。何か助けはありますか?

public class HiveJdbcClient {
  private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver";
  public static void main(String[] args){
      try {
      Class.forName(driverName);
    } catch (ClassNotFoundException e) {
           e.printStackTrace();
      System.exit(1);
    }

    try{
        Connection con = DriverManager.getConnection("jdbc:hive://localhost:10000/default", "", "");
        System.out.println("got the connection");

    }catch(SQLException e){
        e.printStackTrace();
    }
  }
}

netstat の出力:

$ sudo netstat -anlp | grep 10000
Password:
tcp        0      0 0.0.0.0:10000               0.0.0.0:*                   LISTEN      27738/java
tcp      107      0 127.0.0.1:10000             127.0.0.1:45910             ESTABLISHED 27738/java
tcp        0      0 127.0.0.1:33665             127.0.0.1:10000             ESTABLISHED 24475/java
tcp        0      0 127.0.0.1:45910             127.0.0.1:10000             ESTABLISHED 7445/java
tcp      107      0 127.0.0.1:10000             127.0.0.1:33665             ESTABLISHED 27738/java
4

3 に答える 3

1

Naresh: triffserver を停止してみて、ターミナルからHIVE_HOME/binディレクトリに移動してから、./ hive --service hiveserver 10000 &コマンドを使用して hive trift サーバーを開始してください。次に、プログラムを実行してみます。Hive クライアント wiki の例に従ってテーブルを作成します。次に、次のステップで show tables クエリを実行します。この手順を実行したら、結果をお知らせください。その後、話し合いを行うことができます。

于 2012-08-02T06:22:23.160 に答える
1

次の手順を実行して、ハングが発生している場所を特定できます。これは、壊れた Hive JDBC 接続でトレースするために行った例です。これは、一般的なハイブ接続ハング エラーに対する具体的な解決策ではないことに注意してください。

これは、「JDBC ハイブ接続がハングしている場所を見つけるにはどうすればよいですか?」という質問に対する回答です。

これを追跡するのが難しいのは、JDBC の動的呼び出しです。代わりに、手動で HiveConnection() クラスを作成できます。これにより、コードにトレースを直接追加して、ハングが発生している場所を確認できます。

私は次のようにしてこれを追跡しました。

* LOG4J の使用 *

thrift およびその他の JDBC ハイブ クラスは、接続時に log4j を使用します。DEBUG ロギングをオンにすると、詳細なエラーが表示されます。追加することでこれを簡単に行うことができます

BasicConfigurator.configure()

クライアント アプリへ。いずれにせよ、これを行うと、これが SASL トランスポート層で停止しているように見えることがわかりました。セキュリティに関連している可能性があると思いますが、セキュリティエラーはまだ返され、ハングしないと思います...したがって、これはJIRAに値すると思います。フォローアップの質問を貼り付けました:

TSaslTransport (ハイブ関連) の障害を追跡するにはどうすればよいですか?

* 別の方法 *

1) github などから「HiveConnection」クラスのコピーを取得し、新しいインスタンスを作成できます。

String url=String.format("jdbc:hive2://%s:%s/default", server, port) Properties p = new Properties(); p.setProperty("host", con); Connection jdbc = new HiveConnection(url,p);

次に、デバッガー フックまたはログ ステートメントを HiveConnection() クラスに追加できます。

最終的に、このエラーが発生したとき、次のように追跡しました。

openTransport

最終的に作成するのは

org.apache.thrift.transport.TSaslClientTransport

実例。

そして、次のコード ブロックでハングが発生します。

try { System.out.println(".....1 carrying on... attempting to open. " + transport.getClass().getName()); transport.open(); System.out.println("done open."); } catch (TTransportException e) { System.out.println("2 fail ."); e.printStackTrace(); throw new SQLException("Could not establish connection to " + uri + ": " + e.getMessage(), " 08S01"); }

参考までに、接続が失敗した理由についてフォローアップを投稿しました。それはあなたにも関連している可能性があります... TSaslTransport(ハイブ関連)の失敗を追跡するにはどうすればよいですか

于 2014-04-05T21:48:50.467 に答える