HadoopでShuffle Error

reduce処理で「Shuffle Error: Exceeded MAX_FAILED_UNIQUE_FETCHES; bailing-out.」と出て戦ったのでメモ。
原因としては各ノードのホスト名(と対応するIPアドレス)が127.0.0.1で通信不能だったため。

↓のようなNICを複数持っている構成の場合(ホスト名=127.0.0.1とhostsに書いてました)

NameNode
ホスト:namenode01.matsumo(127.0.0.1)
eth0:192.168.1.1 # 外向けセグメント(hostsにnamenode01.matsumo.sotoと登録)
eth1:192.168.2.1 # 中向けセグメント(hostsにnamenode01.matsumo.nakaと登録)

DataNode
ホスト:datanode01.matsumo(127.0.0.1)
eth0:192.168.1.2 # 外向けセグメント(hostsにdatanode01.matsumo.sotoと登録)
eth1:192.168.2.2 # 中向けセグメント(hostsにdatanode01.matsumo.nakaと登録)

Hadoopのconf/slaveには中向け通信なので

datanode01.matsumo.naka

と書いておきます。よっしゃよっしゃ(とこの時は思っていた)

するとあらら・・・Reduce失敗。
↓のメッセージがログに出てました。
「Shuffle Error: Exceeded MAX_FAILED_UNIQUE_FETCHES; bailing-out.」

半日くらい戦ったんで結論を勿体ぶりたいですが、端的に言うとnamenode01.matsumo(サーバのホスト名)で名前解決出来てかつ通信出来ないといけないという事みたいです。
内部の何処で何をやってるかは正直分かりませんが・・・

という訳でホスト名と対応するIPアドレスを中向けセグメントに直したら無事動きました

127.0.0.1 namenode01 namenode01.matsumo  localhost localhost.localdomain
↓
127.0.0.1 localhost localhost.localdomain
192.168.2.1 namenode01 namenode01.matsumo namenode01.matsumo.naka

中々それっぽいページが見つからなかったので書いておきます。