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.
ここで何が足りないの!?
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に変更して実行します。