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
中々それっぽいページが見つからなかったので書いておきます。