HiveでSocketが解放されずに溜まっていくバグ
っていうのに数日悩まされ続けて、ある程度軽減できる対処法が見つかったので展開しておきます。
(既にhiveのuser mlには投稿してます)
再現方法:https://gist.github.com/3234772(英語)
簡単に言ってしまうと、link.txtを置くような形式のテーブルに対してselect文を実行する度、socketがCLOSE_WAITのまま溜まっていきます。パーティション+Symboliclinkだとパーティションの文だけ一気にsocketが溜まっていく・・なんてこともあります。割とさくっと数万単位でsocketが貯まります・・他の会社でHive使ってる方は遭遇しなかったのでしょうか。実体のファイルをそのまま置いてるのかな?
対処方法としては、socketが溜まったらhdfsを再起動してsocketを全部閉じてしまうって逃げ方もありなんですが、一部問題個所があったのでそれも報告しておきました。
具体的に言うと、
これの66行目で使われてるReaderがclose呼ばれてないです。
SymbolicTextInputFormatにも同様の問題があります。
うちの環境ではこの部分直してリビルドしたら、大分CLOSE_WAITが減りました(まだ完全には無くなってないのですが)。