CDH3u5で使っていたクラスタをOSそのまま(再起動すらしてない)でCDH3をまるっと削除してCDH4に変えたところ、突然名前解決ができないと言いだしてまるで動かない状態になって右往左往していた。まるで原因が見えず失意のどん底に落ち無力感にさいなまれると試して当然と思えることがまったく思い付かなくなってヤバい。
なお症状としては以下の通り。誰かがぐぐったときのために細かく書いておく。
- CDH3u5 + Java6 では問題ない
- CDH4.1.2 + Java6 で以下の問題が起きた
- ホスト名の解決ができなくなる
- DataNodeからNameNodeに接続できない
- DataNodeのログに以下のようなメッセージが延々出る
- DataNodeからNameNodeに接続できない
Problem connecting to server: namenode:8020
java.lang.IllegalArgumentException: java.net.UnknownHostException: namenode.hostname.fqdn
-
-
- ページ遷移時、わざわざIPから逆引きした名前でNameNodeが指定され、それが解決できないためらしい
- /etc/hosts にNameNodeのホスト名を記述
- なんか起動するようにはなった
- distcpとかがコケる
- 正確には _SUCCESS が作られて正常終了するのに、欠落しているファイルが多い
- part-00000.gz を展開して見てみると FATAL なログが大量に出ている(名前解決の失敗)
- なんでそれで _SUCCESS なんだ……
-
結果として名前解決を本気でどうにかしなければならなかった。
結論
resolv.conf は元々以下のようであった。CDH3で動いてたし、Hadoopと関係ないあれこれも正常に普通に動いてる。CDH4にしたらコケた。
search localdomain secondarylocaldomain nameserver xx.xx.xx.xx options rotate timeout:1 attempts:2
options から rotate を外したらCDH4でも正常に動作するようになった(ように見える)。
search localdomain secondarylocaldomain nameserver xx.xx.xx.xx options timeout:1 attempts:2
Hadoopのレイヤでこんなところハンドリングしてないだろと思い込んでたんだけど、改めて見てみるとCDH3とCDH4の差しか無いんだよなあ。うーん。
rotate指定してるのにnameserverがひとつしか無いという状況を想定してなかったんだろうけど、あーもー。ということでハマってました。ああもう。