2013-10-06 17 views
38

Come qualcuno aggiusta un HDFS che è corrotto? Ho consultato il sito Web Apache/Hadoop e ha detto che è fsck command, che non lo aggiusta. Speriamo che qualcuno che si è imbattuto in questo problema prima possa dirmi come risolvere questo problema.Come riparare i file corrotti HDFS

A differenza di una utility fsck tradizionale per file system nativi, questo comando non corregge gli errori rilevati. Normalmente NameNode corregge automaticamente la maggior parte dei guasti recuperabili.

Quando eseguivo bin/hadoop fsck/-delete, elencava i file che erano blocchi corrotti o mancanti. Come posso renderlo non corrotto? Questo è su una macchina da allenamento, quindi potrei soffiare via tutto ma quando andremo live, non sarò in grado di "aggiustarlo" soffiando via tutto così sto cercando di capirlo adesso.

risposta

69

È possibile utilizzare

hdfs fsck/

per determinare quali file stanno avendo problemi. Guarda l'output per i blocchi mancanti o corrotti (ignora i blocchi sotto-replicati per ora). Questo comando è davvero verbose soprattutto su un grande filesystem HDFS così io normalmente scendere al l'uscita significativo con

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

che ignora le linee con nient'altro che punti e linee che parlano di replica.

Una volta trovato un file che è danneggiato

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

utilizzare tale uscita per determinare dove i blocchi potrebbero vivere. Se il file è più grande della dimensione del blocco, potrebbe avere più blocchi.

È possibile utilizzare i numeri di blocco riportati per passare ai datanode e ai registri del namenode alla ricerca della macchina o delle macchine su cui sono stati utilizzati i blocchi. Prova a cercare errori di filesystem su quelle macchine. Punti di montaggio mancanti, datanode non in esecuzione, sistema di file riformattato/reprovisionato. Se riesci a trovare un problema con lo in questo modo e riporta il blocco online, il file sarà di nuovo in buona salute .

Lather risciacquo e ripetere fino a quando tutti i file sono sani o si scarico tutte le alternative cercando i blocchi.

Una volta a determinare ciò che è successo e non è possibile recuperare le più blocchi, basta usare il comando

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

per ottenere il vostro file system HDFS torna a sani in modo da poter iniziare a tracciamento nuovi errori che si verificano.

+4

Thx per la tua risposta. Proverò il tuo suggerimento la prossima volta che l'HDFS presenta problemi. In qualche modo, si è risolto quando ho eseguito 'bin/hadoop fsck/-delete'. Successivamente, l'HDFS non è stato più danneggiato e alcuni file sono stati trovati in/lost + found. Non l'ha fatto prima quando ho fermato l'HDFS e riavviato più volte. Ho upvoted e accettato la tua risposta =) Thx di nuovo. – Classified

+7

Ma se un file viene replicato 3 volte nel cluster, non posso semplicemente riprenderlo da un altro nodo? So che ho avuto qualche perdita di dati su una macchina, ma non è l'intero punto di HDFS che questo non dovrebbe importare? –

+0

L'ho fatto per un periodo di tempo prolungato e non ho risolto il problema. Ma sono consapevole che non esiste altra opzione per recuperare i dati danneggiati o persi in hdf. Ancora posso vedere il problema dei blocchi corrotti anche se cancellato i dati da tutti i nodi dati. –

-5

avvia tutti i daemon ed esegue il comando come "hadoop namenode -recover -force" ferma i daemon e ricomincia .. aspetta un po 'di tempo per recuperare i dati.

4

Se si desidera solo per ottenere il vostro HDFS ritornare allo stato normale e non preoccuparti molto circa i dati, quindi

Questo elencherà i corrotti blocchi HDFS:

hdfs fsck -list-corruptfileblocks

Questa volontà eliminare i blocchi corrotti HDFS:

hdfs fsck/-delete

si noti che, si potrebbe ettari ve usare sudo -u hdfs se non sei l'utente sudo (assumendo "hdfs" è il nome dell'utente sudo)

Problemi correlati