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