2012-04-03 18 views
8

Tengo un trabajo de hadoop simple que rastrea sitios web y los almacena en caché en el HDFS. El asignador verifica si ya existe una URL en el HDFS y, de ser así, la usa, de lo contrario, descarga la página y la guarda en el HDFS.¿Cómo resolver 'el archivo solo podría replicarse en 0 nodos, en lugar de 1' en hadoop?

Si se produce un error de red (404, etc.) al descargar la página, la URL se omite por completo, no se escribe en el HDFS. Cada vez que ejecuto una lista pequeña ~ 1000 sitios web, siempre me parece que encuentro este error que bloquea el trabajo repetidamente en mi instalación pseudo distribuida. ¿Cual podría ser el problema?

Estoy ejecutando 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

¿Por qué simplemente no configura "dfs.replication" en 0 en hdfs-site.xml. Como está utilizando pseudo modo, la replicación de datos no le concierne. –

Respuesta

2

El problema era una instancia de FileSystem InputStream no cerrada en el asignador que se utilizó para el almacenamiento en caché de la entrada al sistema de archivos.

1

Buscando por fuentes que probabbly salir del espacio en el equipo local (o VM). Esta excepción se produce cuando el sistema no puede encontrar suficientes nodos para la replicación. La clase responsable de seleccionar nodos es ReplicationTargetChooser.

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

Su método principal es chooseTarget (línea 67).
Después de sumergirse en el código, accederá al método isGoodTarget, que también verifica si hay suficiente espacio en el nodo: Línea 404.
Si habilita los registros de depuración, probablemente verá el mensaje correspondiente.

1

Compruebe los registros de namenode, haciendo coincidir las marcas de tiempo. Si hay una indicación sobre problemas con IPC, es probable que se esté quedando sin "xcievers". En mi caso, estableciendo dfs.datanode.max.xcievers en hdfs-site.xml a un valor mayor, es decir 4096 u 8192, solucionó ese problema en particular para mí.

Cuestiones relacionadas