EMR限定なのかどうかは知らないけど、とりあえず書いておく。
某所に怒られたら消そう。ありがとう某所の中の人。
Emr5.8.0はHiveのバージョンが2.3.0になっており、どうやら2.1系とメタストアの互換性がないらしい。そのため、2.1系でRDSとかにメタストア作ってた場合、流用しようとするとクラスタの起動が出来ない。
以下はEMRでの手順を指す。一部手順はEMR使ってない場合でも流用できる気がする。
まず、hive-siteから
javax.jdo.option.ConnectionUserName
javax.jdo.option.ConnectionPassword
javax.jdo.option.ConnectionURL
この3つの設定ふっとばしてローカルのメタストアを向くようにしてクラスタ起動。
その後、masterインスタンスに繋いで/etc/hive/conf/hive-site.xmlを直接編集する。
※rootユーザ
javax.jdo.option.ConnectionUserName
javax.jdo.option.ConnectionPassword
javax.jdo.option.ConnectionURL
この3つがローカル用の設定になってるはずなので、それを今まで2.1系で使ってたRDSの設定を入れる。
その後、hadoopユーザとなり、
hive --service schemaTool -dbType mysql -info
を実行すると、
...
Hive distribution version
Metastore schema version
...
*** schemaTool failed ***
こんなんが出るはず。で、多分2つのversionが違うはずなので、
hive --service schemaTool -dbType mysql -upgradeSchema
...
schemaTool completed
失敗しなけりゃOK。またinfo叩くと今度は成功するはず。
なんかupgradeSchemaの中身は.sqlファイル実行してるだけくさいから直接手動でSQL流すでもいけるんでは?と思いはしたけどやめておいた。
20171027追記
ドハマりしたが解決したので。(確認バージョンEMR5.9.0)
core-siteに
fs.s3.awsAccessKeyId
fs.s3.awsSecretAccessKey
の設定がしてある場合、hiveでcountクエリが通らなかった。
ロールにs3のフル権限つけて、上の設定外したら通るようになった。