Hiveをjdbc経由で使う方法
現在、仕事でHadoopのサブプロジェクトであるHiveをいじってます。
で、今回、JDBC経由で使ってみたので紹介します。
Hiveのインストールなどの仕方は以下を参照してください。
http://wiki.apache.org/hadoop/Hive/GettingStarted
まず、Hiveサーバを立ち上げます。
ポート番号はHIVE_PORTを設定しておけば、変更できます。デフォルトは10000です。
hive --service hiveserver
で、以下のようなコードで、HiveにJDBCでアクセスできます。
String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver"; try { Class.forName(driverName); } catch (ClassNotFoundException e) { e.printStackTrace(); System.exit(1); } Connection con = DriverManager.getConnection("jdbc:hive://localhost:10000/default", "", ""); Statement stmt = con.createStatement(); String sql = "select count(1) from table"; System.out.println("Running: " + sql); ResultSet res = stmt.executeQuery(sql); while (res.next()) { System.out.println(String.valueOf(res.getString(1))); }
executeQueryすると、Hiveサーバ側でMapReduceが始まって、結果が返ってきます。
※注意
Clouderaのパッケージでインストールしたのですが、Hadoopのバージョンが0.20.1+169.56だと、${HADOOP_HOME}/lib/libfb303.jar と ${HADOOP_HOME}/lib/libthrift.jar を ${HIVE_HOME}/lib/libfb303.jar と ${HIVE_HOME}/lib/libthrift.jar で上書きしないとエラーが出でます。
すごく、はまりました。。。