it-swarm.com.de

So beheben Sie beschädigte HDFS-Dateien

Wie repariert jemand ein beschädigtes HDFS? Ich habe auf der Apache/Hadoop-Website nachgesehen, und es wurde der Befehl fsck angegeben, der ihn nicht behebt. Hoffentlich kann mir jemand, der dieses Problem schon einmal erlebt hat, sagen, wie ich das beheben kann.

Im Gegensatz zu einem herkömmlichen fsck-Dienstprogramm für native Dateisysteme korrigiert dieser Befehl die erkannten Fehler nicht. Normalerweise korrigiert NameNode die meisten wiederherstellbaren Fehler automatisch.

Beim Ausführen von bin/hadoop fsck / -delete wurden die Dateien aufgelistet, die beschädigt waren oder fehlende Blöcke waren. Wie mache ich es nicht korrupt? Dies ist auf einem Übungsgerät, also KÖNNTE ich alles wegblasen, aber wenn wir live gehen, kann ich es nicht "reparieren", indem ich alles wegblase, also versuche ich es jetzt herauszufinden.

52
Classified

Sie können verwenden 

  hdfs fsck /

um festzustellen, welche Dateien Probleme haben. Durchsuchen Sie die Ausgabe nach fehlenden oder beschädigten Blöcken. Ignorieren Sie unterreplizierte Blöcke. Dieser Befehl ist wirklich Verbose insbesondere auf einem großen HDFS-Dateisystem, so dass ich normalerweise auf Die sinnvolle Ausgabe mit

  hdfs fsck / | egrep -v '^\.+$' | grep -v eplica

zeilen werden ignoriert, und es werden nur Punkte und Zeilen angezeigt, die über Replikation sprechen.

Sobald Sie eine Datei gefunden haben, die beschädigt ist

  hdfs fsck /path/to/corrupt/file -locations -blocks -files

Verwenden Sie diese Ausgabe, um zu bestimmen, wo Blöcke leben können. Wenn die Datei größer als Ihre Blockgröße ist, hat sie möglicherweise mehrere Blöcke.

Sie können die gemeldeten Blocknummern verwenden, um zu den -Datenanoden zu gelangen, und die Namen-Knotenprotokolle suchen nach dem Computer oder den Computern , Auf denen die Blöcke lebten. Suchen Sie nach Dateisystemfehlern Auf diesen Computern. Fehlende Einhängepunkte, Datenknoten nicht aktiv, Dateisystem __ neu formatiert/erneut bereitgestellt. Wenn Sie auf diese Weise ein Problem finden und den Block wieder online stellen können, ist diese Datei wieder gesund

Spülen Sie es aus und wiederholen Sie den Vorgang, bis alle Dateien in Ordnung sind oder Sie erschöpft sind. Alle Alternativen suchen nach den Blöcken.

Sobald Sie festgestellt haben, was passiert ist und Sie keine weiteren Blöcke wiederherstellen können, verwenden Sie .__ 

  hdfs fs -rm /path/to/file/with/permanently/missing/blocks

befehl, um das HDFS-Dateisystem wiederherzustellen, damit Sie beginnen können Neue Fehler nach deren Auftreten zu verfolgen.

82
mobileAgent

Wenn Sie nur Ihr HDFS wieder in den Normalzustand versetzen möchten und sich nicht viel um die Daten kümmern müssen, dann

Dies wird die beschädigten HDFS-Blöcke auflisten:

hdfs fsck -list-corruptfileblocks

Dadurch werden die beschädigten HDFS-Blöcke gelöscht:

hdfs fsck / -delete

Beachten Sie, dass Sie möglicherweise Sudo -u hdfs verwenden müssen, wenn Sie nicht der Sudo-Benutzer sind.

11
daemon12

die Lösung hier hat für mich funktioniert: https://community.hortonworks.com/articles/4427/fix-under-replicated-blöcke-in-hdfs-manually.html

su - <$hdfs_user>

bash-4.1$ hdfs fsck / | grep 'Under replicated' | awk -F':' '{print $1}' >> /tmp/under_replicated_files 

-bash-4.1$ for hdfsfile in `cat /tmp/under_replicated_files`; do echo "Fixing $hdfsfile :" ;  hadoop fs -setrep 3 $hdfsfile; done
0
abc123