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 で上書きしないとエラーが出でます。
すごく、はまりました。。。