2012-04-03 7 views
8

Ho un semplice job hadoop che esegue la scansione dei siti Web e li memorizza nell'HDFS. Il mapper controlla se esiste già un URL in HDFS e, in caso affermativo, lo utilizza altrimenti scarica la pagina e la salva su HDFS.Come risolvere 'il file può essere replicato solo su 0 nodi, invece di 1' su hadoop?

Se si verifica un errore di rete (404, ecc.) Durante il download della pagina, l'URL viene saltato interamente, non scritto sull'HDFS. Ogni volta che eseguo una piccola lista di circa 1000 siti web, mi sembra sempre di incontrare questo errore che causa il crash del lavoro ripetutamente nella mia installazione pseudo-distribuita. Quale potrebbe essere il problema?

Sto eseguendo Hadoop 0.20.2-cdh3u3.

org.apache.hadoop.ipc.RemoteException: java.io.IOException: File /user/raj/cache/9b4edc6adab6f81d5bbb84fdabb82ac0 could only be replicated to 0 nodes, instead of 1 
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:1520) 
    at org.apache.hadoop.hdfs.server.namenode.NameNode.addBlock(NameNode.java:665) 
    at sun.reflect.GeneratedMethodAccessor7.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:616) 
    at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:557) 
    at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1434) 
    at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1430) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.Subject.doAs(Subject.java:416) 
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1157) 
    at org.apache.hadoop.ipc.Server$Handler.run(Server.java:1428) 
+0

Perché non è sufficiente impostare "dfs.replication" su 0 in hdfs-site.xml. Poiché stai utilizzando la modalità pseudo, la replica dei dati non ti riguarda. –

risposta

2

Il problema era un'istanza InputStream FileSystem non chiusa nel mapper utilizzata per l'immissione nella cache di input nel file system.

1

Guardando da fonti è possibile che lo spazio sulla macchina locale (o VM) venga esaurito. Questa eccezione si verifica quando il sistema non riesce a trovare nodi sufficienti per la replica. La classe responsabile della selezione dei nodi è ReplicationTargetChooser.

http://javasourcecode.org/html/open-source/hadoop/hadoop-0.20.203.0/org/apache/hadoop/hdfs/server/namenode/ReplicationTargetChooser.java.html

suo metodo principale è chooseTarget (linea 67).
Dopo l'immersione nel codice si entra nel metodo isGoodTarget, che controlla anche se vi è spazio sufficiente sul nodo: Linea 404.
Se si abilitano i log di debug, si vedrà probabilmente il messaggio pertinente.

1

Controllare i log del namenode, facendo corrispondere i timestamp. Se c'è un'indicazione sui problemi con IPC, probabilmente stai finendo gli "xcievers". Nel mio caso, l'impostazione di dfs.datanode.max.xcievers in hdfs-site.xml a un valore superiore, vale a dire 4096 o 8192, ha risolto quel problema particolare per me.

Problemi correlati