web-dev-qa-db-ja.com

EclipseからHiveへのJDBC接続を確立できません

Eclipseからテーブルを表示および作成し、Hiveテーブルにクエリを実行できるように、HiveへのJDBC接続を確立しようとしています。 HiveClientサンプルコードを使用しました: https://cwiki.Apache.org/confluence/display/Hive/HiveClient 次に、必要なすべてのjarをJavaビルドに追加しましたEclipse内のパスで、Hive ThriftServerを起動しました。ポート10000がリッスンしています。ClouderaQuickstartVM4.6.1とそれに付属するEclipseを使用しています。これがIDEのときに発生するエラーです。コードを実行してみてください。

Exception in thread "main" Java.sql.SQLException: org.Apache.thrift.transport.TTransportException: Java.net.SocketException: Connection reset
    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:108)
    at org.Apache.hadoop.Hive.jdbc.HiveConnection.<init>(HiveConnection.Java:103)
    at org.Apache.hadoop.Hive.jdbc.HiveDriver.connect(HiveDriver.Java:104)
    at Java.sql.DriverManager.getConnection(DriverManager.Java:582)
    at Java.sql.DriverManager.getConnection(DriverManager.Java:185)
    at jdbc.Hive.main(Hive.Java:24)

Beelineを使用してHiveに接続しようとすると、同じエラーが発生します。ただし、!connectコマンドからホスト名とポートを削除すると、次のエラーが発生します。

beeline> !connect jdbc:Hive:// "" ""                 
scan complete in 4ms
Connecting to jdbc:Hive://
14/03/21 18:42:03 WARN conf.HiveConf: DEPRECATED: Configuration property Hive.metastore.local no longer has any effect. Make sure to provide a valid value for Hive.metastore.uris if you are connecting to a remote metastore.
14/03/21 18:42:03 INFO metastore.HiveMetaStore: 0: Opening raw store with implemenation class:org.Apache.hadoop.Hive.metastore.ObjectStore
14/03/21 18:42:04 INFO metastore.ObjectStore: ObjectStore, initialize called
14/03/21 18:42:05 INFO DataNucleus.Persistence: Property datanucleus.cache.level2 unknown - will be ignored.

ここで何が足りないの!?

7
Ramtin

Jdbcを使用してhiveserverに接続するには2つのオプションがあります

オプション1:Hiveserver2

Hiveserver2に接続しようとしています。clouderamanagerのhiveserverバージョンはhivesever2で、hiveserverよりも安全です。使用しているJDBCコードはhiveserverです。hiveserver2には次のコードスニペットを使用してください

Class.forName("org.Apache.Hive.jdbc.HiveDriver");
Connection con = DriverManager.getConnection("jdbc:Hive2://localhost:10000/default", "Hive", "");
Statement stmt = con.createStatement();
String tableName = "testHiveDriverTable";
stmt.execute("drop table if exists " + tableName);
stmt.execute("create table " + tableName + " (key int, value string)");
String sql = "show tables '" + tableName + "'";

接続文字列を見ると、hiveserverバージョン2(jdbc:Hive2:// localhost:10000/default "、" "、" ")、2番目と3番目の引数はユーザー名とパスワードであり、デフォルトでは空の文字列" "のままにします。

このプログラムを実行するには、hiveserver2固有のライブラリを追加します。

Hiveserver2 jdbc接続をチェックするための独自のプログラムを作成する代わりに、beelineHiveクライアントを次のように使用できます。

> [testuser02@Abcd-Host1 ~]$ beeline

> beeline> !connect jdbc:Hive2://Abcd-Host1:10000/default "" "" ""
> 
> 0: jdbc:Hive2://Abcd-Host1:10000/default> show tables;

+------------+
|  tab_name  |
+------------+
| sample_07  |
| sample_08  |
| test1      |
+------------+
3 rows selected (0.334 seconds)

オプション2:Hiveserver1

あなたが持っている既存のコード(hiveserver1のコード)を利用したい場合 https://cwiki.Apache.org/confluence/display/Hive/HiveClient 。別のポートのユーザースペースで新しいハイブサーバーを起動する必要があります。次のコマンドを使用して、特定のポートでハイブサーバーを起動します

Nohup Hive --service hiveserver -p 10001&

ここで、jdbc接続のポート番号を10001に変更して実行します。

12
SachinJ