hiveのジョブをsubmitできずにそのままhiveクライアントプロセスが残り続ける現象について

再現性は無いんですけどHiveServer経由でhiveのジョブをsubmitしようとしてもできずにそのままhiveクライアントプロセスが残り続けるという現象に遭遇しました。
submitされてないのでMapReduceも進まないという状況です。ジョブが失敗している訳ではないのでazkabanのretryも効かず延々実行中でした。
こういうのは検知が遅れるのでちょっと困るんですよね。

環境はHadoop 1.2.1 + Hive 0.12 + Oracle JDK 1.7_40です。
何回か遭遇しててその度に該当のJavaプロセスをkillしてretryしていました。ログに何もでないので詳細がよく分からなかったんですよね。

で、最近この問題に遭遇してふと思い立って該当のhiveプロセスをjstackするとこんなんが出てました。

java.lang.Thread.State: RUNNABLE
        at java.util.WeakHashMap.get(WeakHashMap.java:471)
        at com.sun.beans.WeakCache.get(WeakCache.java:55)
        at com.sun.beans.finder.MethodFinder.findMethod(MethodFinder.java:68)
        at java.beans.Statement.getMethod(Statement.java:357)
        at java.beans.Statement.invokeInternal(Statement.java:287)
        at java.beans.Statement.access$000(Statement.java:58)
        at java.beans.Statement$2.run(Statement.java:185)
        ...
        at java.beans.XMLEncoder.writeObject(XMLEncoder.java:330)
        at org.apache.hadoop.hive.ql.exec.Utilities.serializeObject(Utilities.java:666)
        at org.apache.hadoop.hive.ql.exec.Utilities.serializePlan(Utilities.java:610)
        at org.apache.hadoop.hive.ql.exec.Utilities.setBaseWork(Utilities.java:495)
        at org.apache.hadoop.hive.ql.exec.Utilities.setReduceWork(Utilities.java:483)
        at org.apache.hadoop.hive.ql.exec.Utilities.setMapRedWork(Utilities.java:474)
        at org.apache.hadoop.hive.ql.exec.mr.ExecDriver.execute(ExecDriver.java:383)
        at org.apache.hadoop.hive.ql.exec.mr.MapRedTask.execute(MapRedTask.java:144)
        at org.apache.hadoop.hive.ql.exec.Task.executeTask(Task.java:151)
        at org.apache.hadoop.hive.ql.exec.TaskRunner.runSequential(TaskRunner.java:65)
        at org.apache.hadoop.hive.ql.exec.TaskRunner.run(TaskRunner.java:55)

このスタックトレースぐぐると該当するのがこの辺。

JIRAを読んで僕が理解した限りだと、OpenJDKのバグです。

スレッドセーフでないWeakHashMapがあってそのラッパーであるWeakCacheにMethodFinderがマルチスレッドでアクセスして、循環参照が起きて無限ループになるみたいな感じっぽいです。

で、僕が使っているのはOpenJDKではなくOracle JDKなのですが、同じなのかなと勝手に想像してます。

7u60で直るみたいなことあいてあるんですけど、Oracle JDKだと最新は7u55だし、なんか要するに[HIVE-5411] Migrate expression serialization to Kryo - ASF JIRAが適用されれば直るようです。まあそれって、要するにHive 0.13にバージョンアップするってことなわけで、バージョンアップはしてみました。その後数日経ちましたが同様の問題は起きてないです。別の問題はたくさんおきましたが。。。ま、それはおいときます。対応したの僕じゃないので。。。