2011-10-31 27 views
7

Esta es una pregunta general acerca de las excepciones Java EOF, así como de la excepción EOF de Hadoop, que está relacionada con la interoperabilidad de jar. Los comentarios y respuestas sobre cualquier tema son aceptables.¿Cuál es el significado de las excepciones de EOF en las conexiones de hadoop namenode desde hbase/filesystem?

Antecedentes

estoy observando algunos temas que discuten una excepción críptica, que es en última instancia, causada por un método "readInt". Esta excepción parece tener algunas implicaciones genéricas que son independientes de hadoop, pero en última instancia, es causada por la interoperabilidad de los frascos de Hadoop.

En mi caso, lo obtengo cuando intento crear un nuevo objeto FileSystem en hadoop, en java.

Pregunta

Mi pregunta es: ¿qué está sucediendo y por qué la lectura de un entero una excepción EOF? ¿A qué "Archivo" se refiere esta excepción EOF, y por qué se lanzaría tal excepción si dos jarras no son capaces de interoperar?

En segundo lugar, también me gustaría saber cómo solucionar este error para que pueda conectarse y lectura/escritura hadoops sistema de archivos mediante el protocolo hdfs con la API de Java, de forma remota ....

 
java.io.IOException: Call to /10.0.1.37:50070 failed on local exception: java.io.EOFException 
    at org.apache.hadoop.ipc.Client.wrapException(Client.java:1139) 
    at org.apache.hadoop.ipc.Client.call(Client.java:1107) 
    at org.apache.hadoop.ipc.RPC$Invoker.invoke(RPC.java:226) 
    at $Proxy0.getProtocolVersion(Unknown Source) 
    at org.apache.hadoop.ipc.RPC.getProxy(RPC.java:398) 
    at org.apache.hadoop.ipc.RPC.getProxy(RPC.java:384) 
    at org.apache.hadoop.hdfs.DFSClient.createRPCNamenode(DFSClient.java:111) 
    at org.apache.hadoop.hdfs.DFSClient.(DFSClient.java:213) 
    at org.apache.hadoop.hdfs.DFSClient.(DFSClient.java:180) 
    at org.apache.hadoop.hdfs.DistributedFileSystem.initialize(DistributedFileSystem.java:89) 
    at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:1514) 
    at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:67) 
    at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:1548) 
    at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:1530) 
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:228) 
    at sb.HadoopRemote.main(HadoopRemote.java:35) 
Caused by: java.io.EOFException 
    at java.io.DataInputStream.readInt(DataInputStream.java:375) 
    at org.apache.hadoop.ipc.Client$Connection.receiveResponse(Client.java:819) 
    at org.apache.hadoop.ipc.Client$Connection.run(Client.java:720) 

Respuesta

5

En cuanto a hadoop: ¡Solucioné el error! Debe asegurarse de que core-site.xml se encuentre en 0.0.0.0 en lugar de 127.0.0.1 (localhost).

Si obtiene la excepción EOF, significa que el puerto no está accesible externamente en esa ip, por lo que no hay datos para leer entre el cliente/servidor de hadoop ipc.

+1

También podría significar otras cosas ... La excepción EOF es bastante genérica. – jayunit100

+0

lo siento, ¿qué quiere decir servir a 0.0.0.0. ¿Podría por favor documentar el par de prop de nombre/valor de su configuración? – hba

+1

¿qué quiere decir con "servir a 0.0.0.0"? El archivo core-site.sh tiene la propiedad ' fs.default.name hdfs: // localhost: 9000/'. Cambiar esta configuración de 'localhost' a' 0.0.0.0' no resuelve el problema. – nikk

2

EOFException en un socket significa que no hay más datos y el par ha cerrado la conexión.

Cuestiones relacionadas