Ich habe einen einfachen Hadoop-Job, der Websites crawlt und sie im HDFS zwischenspeichert. Der Mapper prüft, ob bereits eine URL im HDFS existiert und verwendet sie andernfalls, lädt die Seite herunter und speichert sie im HDFS.
Wenn beim Herunterladen der Seite ein Netzwerkfehler (404 usw.) auftritt, wird die URL vollständig übersprungen - nicht in das HDFS geschrieben. Immer, wenn ich eine kleine Liste ~ 1000 Webseiten betreibe, scheint ich immer auf diesen Fehler zu stoßen, der den Job wiederholt in meiner pseudoverteilten Installation zum Absturz bringt. Was könnte das Problem sein?
Ich betreibe Hadoop 0.20.2-cdh3u3.
%Vor% Wenn Sie nach Quellen suchen, haben Sie wahrscheinlich auf Ihrem lokalen Computer (oder VM) keinen Platz mehr.
Diese Ausnahme wird verursacht, wenn das System nicht genügend Knoten für die Replikation finden kann.
Die für die Auswahl der Knoten zuständige Klasse ist ReplicationTargetChooser.
Die Hauptmethode ist chooseTarget (Zeile 67).
Nach dem Eintauchen in Code gelangen Sie in die Methode isGoodTarget, die ebenfalls prüft, ob auf dem Knoten genügend Platz ist: Zeile 404.
Wenn Sie Debug-Protokolle aktivieren, werden Sie wahrscheinlich die entsprechende Nachricht sehen.
Bitte überprüfen Sie die namenode-Protokolle, die den Zeitstempeln entsprechen. Wenn es einen Hinweis auf Probleme mit IPC gibt, haben Sie wahrscheinlich keine "Xcievers" mehr. In meinem Fall habe ich dfs.datanode.max.xcievers in hdfs-site.xml auf einen größeren Wert gesetzt, zB 4096 oder 8192, und habe dieses Problem für mich behoben.