Hive 0.12へのバージョンアップ

Hive 0.11から0.12へバージョンアップしたのでメモっておく。今のところ特に問題は発生していない。

前回Hive 0.9からHive 0.11へバージョンアップしたときは[HIVE-5237] Incorrect group-by aggregation in 0.11.0 - ASF JIRAというバグを踏んでプギャーってなったけど今回はまだバグを踏んでいない。

参考:
HiveとHBaseの連携は難しい - wyukawa’s blog

HBase 0.94.12との連携はHive 0.11の時と同じようにhive-site.xmlにzookeeper.znode.parentを設定しても下記のようにエラーが出た。
どうもdefalutのzookeeper.znode.parentを見にいってるっぽい。
僕の環境ではzookeeper.znode.parentをいじっているので変更する必要がある。
どうしたもんかなと思ったけどHBaseに関わる設定はhbase-site.xmlにしてこれをhive-site.xmlと同じパスにおいたらうまくいった。

org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /hbase/hbaseid
        at org.apache.zookeeper.KeeperException.create(KeeperException.java:99)
        at org.apache.zookeeper.KeeperException.create(KeeperException.java:51)
        at org.apache.zookeeper.ZooKeeper.exists(ZooKeeper.java:1021)
        at org.apache.hadoop.hbase.zookeeper.RecoverableZooKeeper.exists(RecoverableZooKeeper.java:172)
        at org.apache.hadoop.hbase.zookeeper.ZKUtil.checkExists(ZKUtil.java:450)
        at org.apache.hadoop.hbase.zookeeper.ClusterId.readClusterIdZNode(ClusterId.java:61)
        at org.apache.hadoop.hbase.zookeeper.ClusterId.getId(ClusterId.java:50)
        at org.apache.hadoop.hbase.zookeeper.ClusterId.hasId(ClusterId.java:44)
        at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.ensureZookeeperTrackers(HConnectionManager.java:615)
        at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegion(HConnectionManager.java:871)
        at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegion(HConnectionManager.java:846)
        at org.apache.hadoop.hbase.client.HTable.finishSetup(HTable.java:234)
        at org.apache.hadoop.hbase.client.HTable.<init>(HTable.java:174)
        at org.apache.hadoop.hive.hbase.HiveHBaseTableInputFormat.getSplits(HiveHBaseTableInputFormat.java:443)
        at org.apache.hadoop.hive.ql.io.HiveInputFormat.getSplits(HiveInputFormat.java:294)
        at org.apache.hadoop.hive.ql.io.CombineHiveInputFormat.getSplits(CombineHiveInputFormat.java:303)
        at org.apache.hadoop.mapred.JobClient.writeOldSplits(JobClient.java:1081)
        at org.apache.hadoop.mapred.JobClient.writeSplits(JobClient.java:1073)
        at org.apache.hadoop.mapred.JobClient.access$700(JobClient.java:179)
        at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:983)
        at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:936)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:415)

Hive 0.11とHBase 0.94の連携のときはhive.auto.convert.join.noconditionaltaskをfalseにしたけど今回はしなくても大丈夫だった。

参考:
Hive 0.11で遭遇した問題をメモっておく - wyukawa’s blog

hive.auto.convert.join = falseにはしなくても少量のデータの時は大丈夫だったんだけど、大量のデータの時はジョブがsubmitされるまで時間かかりそうだったので結局hive.auto.convert.join = falseにした。

あとHive 0.12では[HIVE-3603] Enable client-side caching for scans on HBase - ASF JIRAが入っているのでHBase Storage Handlerにパッチするものが減ったので多少楽になった。

Hiveのmetastoreの移行についても書いておく。Hive 0.12へのバージョンアップでスキーマのアップグレードが必要です。

HiveのmetastoreはMySQL使ってるんだけどMySQLのデータベースをHive 0.12用に新規作成してHive 0.11で使っていたデータを移行することで対応しました。
下記はHive 0.11ではhive11というMySQLのデータベースを使っていてHive 0.12ではhive12というMySQLのデータベースを使う場合のコマンド例です。

$ mysqldump … -p hive11 > hive11.dump
$ mysql … -D hive12 < hive11.dump
$ mysql … -D hive12< upgrade-0.11.0-to-0.12.0.mysql.sql