2013-03-22 8 views
17

Ho 3 nodi di dati in esecuzione, durante l'esecuzione di un lavoro che sto ottenendo il seguente dato sotto l'errore,Scrittura HDFS potrebbe essere replicata solo ai 0 nodi invece di minReplication (= 1)

java.io. IOException: File/utente/ashsshar/olhcache/loaderMap9b663bd9 possono essere replicati solo su 0 nodi invece di minReplication (= 1). Ci sono 3 datanode in esecuzione e 3 nodi (s) sono esclusi in questa operazione. a org.apache.hadoop.hdfs.server.blockmanagement.BlockManager.chooseTarget (BlockManager.java:1325)

Questo errore viene soprattutto quando i nostri casi DataNode sono a corto di spazio o se DataNodes non sono in esecuzione. Ho provato a riavviare i DataNode ma ho ancora ottenuto lo stesso errore.

dfsadmin -reports nei nodi del cluster mostra chiaramente che è disponibile molto spazio.

Non sono sicuro del motivo per cui questo sta accadendo.

+0

Avete i permessi file giusti per questo file? – mohit6up

+4

Assicurarsi che l'indirizzo della porta 'dfs.datanode.address' sia aperto. Ho avuto un errore simile e ho scoperto che tra le numerose porte che dovevo aprire, ho trascurato il '50010'. –

+0

Grazie a @MarkW, è stato anche il mio errore. Ti va di aggiungere questo come risposta? –

risposta

14

1.Stop tutti i demoni Hadoop

for x in `cd /etc/init.d ; ls hadoop*` ; do sudo service $x stop ; done 

2.Remove tutti i file da /var/lib/hadoop-hdfs/cache/hdfs/dfs/name

Eg: [email protected]:~$ sudo rm -r /var/lib/hadoop-hdfs/cache/ 

3.Format NameNode

sudo -u hdfs hdfs namenode -format 

4.Start tutti i demoni Hadoop

for x in `cd /etc/init.d ; ls hadoop*` ; do sudo service $x start ; done 

Stop All Hadoop Service

+2

Mi imbatto nello stesso problema, potresti spiegare perché dovrei fare questo per risolvere il problema e se i dati andrebbero persi? – UnixAgain

1

Cosa faccio di solito quando questo accade è che vado a tmp/Hadoop-username/DFS/ directory e cancellare manualmente i dati e nome cartelle (supponendo che si esegue in ambiente Linux).

quindi formattare la DFS chiamando bin/Hadoop NameNode -format (fare in modo che si risponde con un capitale Y quando viene chiesto se si desidera formattare, se non si è chiesto, poi ri-run il comando di nuovo).

Si può quindi iniziare di nuovo Hadoop chiamando bin/start-all.sh

+0

Questa è l'unica soluzione alla domanda dell'OP che ha funzionato per me. Stavo cercando di seguire l'esempio in [link] (http://blog.tundramonkey.com/2013/02/24/setting-up-hadoop-on-osx-mountain-lion) sul mio Macbook osx mountain lion 10.8. 5, ma non è stato possibile vedere il datanode generato dopo start-all.sh, fino a quando non ho cancellato i dati e il nome e le cartelle dei nomi secondari come menzionato sopra. Grazie! –

+0

Solo la soluzione che ho trovato ha funzionato. Grazie! –

2
  1. Controllare se il vostro DataNode è in esecuzione, utilizzare il comando: jps.
  2. Se è non in esecuzione attendere qualche tempo e riprovare.
  3. Se è in esecuzione, penso che sia necessario riformattare il DataNode.
8

Ho avuto lo stesso problema, ho girato molto poco spazio sul disco. Liberare il disco lo ha risolto.

0

Risoluzione molto semplice per lo stesso problema su Windows 8.1
Ho usato Windows 8.1 OS e Hadoop 2.7.2, Ho fatto le seguenti cose per ovviare a questo problema.

  1. quando ho iniziato il HDFS NameNode -format, ho notato che c'è un blocco nella mia directory. si prega di fare riferimento alla figura sottostante.
    HadoopNameNode
  2. Una volta eliminata la cartella completa come mostrato di seguito, e di nuovo ho eseguito il formato di namenode hdfs . Folder location
    Full Folder Delete
  3. Dopo aver eseguito due passaggi precedenti, ho potuto mettere con successo i miei file necessari nel sistema di HDFS. Ho usato il comando start-all.cmd per iniziare il filato e il namenode.
0

Ho avuto questo problema ed ho risolto come muggito:

  1. Trova in cui vengono salvati i DataNode e NameNode metadati/dati; se non riesci a trovarlo, basta fare questo comando su mac per trovarlo (ci si trova in una cartella chiamata "tmp")

    trovare/usr/local/Cellar/-name "tmp";

    comando find è come questo: trovare < "directory"> -name < "alcun indizio stringa per quella directory o file">

  2. Dopo aver trovato il file, cd in esso. /usr/local/Cantina // Hadoop/HDFS/tmp

    poi cd DFS

    quindi utilizzando il comando -ls vedere che i dati e le directory di nomi si trovano lì.

  3. Utilizzando rimuovere comando, rimuoverli entrambi:

    dati rm -r. e rm -R nome

  4. Vai alla cartella bin e alla fine tutto se già non hanno fatto:

    sbin/end-dfs.sh

  5. Uscire dal server o localhost .

  6. Accedere al server di nuovo: ssh < "nome del server">

  7. avviare i DFS:

    sbin/start-DFS.sh

  8. Formato NameNode per essere sicuri:

    bin/HDFS NameNode -format

  9. ora è possibile utilizzare i comandi HDFS per caricare i dati in DFS ed eseguire lavori di MapReduce.