Cloudera Managerを使ってHueをインストールして,SerDeありのテーブルを作成した際にMetastore Managerの画面でテーブルのサンプルを閲覧するとExceptionになってしまう。
Hive CLIでテーブルを作成し,HueのMetastore Managerのテーブルのサンプルタブを押すとおそらくサンプルを取得するクエリが投げられると思うのだけど,SerDe有りのテーブルの場合,add jar
できないのでエラーになってしまう。ちなみに,Beeswax(Hive UI)上でadd jar
してクエリを投げるとサンプルも正常に閲覧できる。セッションが残っている間は有効なのだろうか。
1 2 3 4 5 |
add jar /usr/lib/hive/auxlib/csv-serde.jar; create table my_table(a string, b string) row format serde 'com.bizo.hive.serde.csv.CSVSerde' stored as textfile ; |
ということで,Beeswaxでデフォルトでjarをクラスパスに設定できないかと。jarの指定方法には,hive-conf/hive-site.xml
のhive.aux.jars.path
と環境変数HIVE_AUX_JARS_PATH
があるが,参考リンクを見ると,
Beeswax: there is a workaround with the HIVE_AUX_JARS_PATH : https://issues.cloudera.org/browse/HUE-1127
HiveServer2 supports a hive.aux.jars.path property in the hive-site.xml. HiveServer2 does not support a .hiverc and Hue is looking at providing an equivalent at some point: https://issues.cloudera.org/browse/HUE-1066
と書かれており,Beeswaxではhive-env.sh方式と同様にHIVE_AUX_JARS_PATH
を使って,HiveServer2はhive.aux.jars.path
を使って指定できるみたいだった。けれど,Cloudera ManagerのBeeswaxで安全バルブを探してみたけど見つからない。。そこで,hive-site.xmlの安全バルブに試しに以下のように指定してみたところ上手くいった。どうやらBeeswaxサービス起動時にここをみているようだ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<!-- OK --> <property> <name>hive.aux.jars.path</name> <value>file:///usr/lib/hive/auxlib/csv-serde-1.1.2.jar</value> </property> <!-- NG --> <property> <name>hive.aux.jars.path</name> <value>file:///usr/lib/hive/auxlib</value> </property> <!-- NG --> <property> <name>hive.aux.jars.path</name> <value>/tmp/csv-serde-1.1.2.jar</value> </property> |
パスの指定は,ローカルファイルシステムでディレクトリでなくjarの絶対パスの指定で上手くいった。HDFS上のパスやローカルファイルシステム上のディレクトリを指定してみたが動作しなかった。これで,サンプルのタブを開いても結果が正常に表示されるようになった。
ちなみに,環境は以下。
- CM4.8
- CDH4.4
- Hue2.5
参考
- http://stackoverflow.com/questions/19135869/best-place-for-json-serde-jar-in-cdh-hadoop-for-use-with-hive-hue-mapreduce
- http://d.hatena.ne.jp/tagomoris/20120119/1326970618
コメント