2012-01-24 19 views
7

Estoy tratando de ejecutar los puntos de referencia Terasort y yo estoy poniendo la siguiente excepción:Hadoop: Error en la configuración de objeto

java.lang.RuntimeException: Error in configuring object 
    at org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:93) 
    at org.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:64) 
    at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:117) 
    at org.apache.hadoop.mapred.MapTask$OldOutputCollector.<init>(MapTask.java:573) 
    at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:435) 
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:371) 
    at org.apache.hadoop.mapred.Child$4.run(Child.java:259) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.Subject.doAs(Subject.java:396) 
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1059) 
    at org.apache.hadoop.mapred.Child.main(Child.java:253) 
Caused by: java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:88) 
    ... 10 more 
Caused by: java.lang.IllegalArgumentException: can't read paritions file 
    at org.apache.hadoop.examples.terasort.TeraSort$TotalOrderPartitioner.configure(TeraSort.java:213) 
    ... 15 more 
Caused by: java.io.FileNotFoundException: File _partition.lst does not exist. 
    at org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:371) 
    at org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:245) 
    at org.apache.hadoop.fs.FileSystem.getLength(FileSystem.java:720) 
    at org.apache.hadoop.io.SequenceFile$Reader.<init>(SequenceFile.java:1417) 
    at org.apache.hadoop.io.SequenceFile$Reader.<init>(SequenceFile.java:1412) 
    at org.apache.hadoop.examples.terasort.TeraSort$TotalOrderPartitioner.readPartitions(TeraSort.java:153) 
    at org.apache.hadoop.examples.terasort.TeraSort$TotalOrderPartitioner.configure(TeraSort.java:210) 
    ... 15 more 

Los comandos TeraGen funcionan bien y han creado los archivos de entrada para TeraSort. Aquí está el listado de mi directorio de entrada:

bin/hadoop fs -ls /user/hadoop/terasort-input/Warning: Maximum heap size rounded up to 1024 MB 
Found 5 items 
-rw-r--r-- 1 sqatest supergroup   0 2012-01-23 14:13 /user/hadoop/terasort-input/_SUCCESS 
drwxr-xr-x - sqatest supergroup   0 2012-01-23 13:30 /user/hadoop/terasort-input/_logs 
-rw-r--r-- 1 sqatest supergroup   129 2012-01-23 15:49 /user/hadoop/terasort-input/_partition.lst 
-rw-r--r-- 1 sqatest supergroup 50000000000 2012-01-23 13:30 /user/hadoop/terasort-input/part-00000 
-rw-r--r-- 1 sqatest supergroup 50000000000 2012-01-23 13:30 /user/hadoop/terasort-input/part-00001 

aquí es mi comando para ejecutar el terasort:

bin/hadoop jar hadoop-examples-0.20.203.0.jar terasort -libjars hadoop-examples-0.20.203.0.jar /user/hadoop/terasort-input /user/hadoop/terasort-output 

hago ver el _partition.lst archivo en mi directorio de entrada, yo no entiendo por qué me estoy recibiendo la excepción FileNotFoundException.

que siguieron a los detalles de configuración proporcionados: http://www.michael-noll.com/blog/2011/04/09/benchmarking-and-stress-testing-an-hadoop-cluster-with-terasort-testdfsio-nnbench-mrbench/

+0

Está buscando en RawLocalFileSystem no en DistributedFileSystem. ¿Estás proporcionando la dirección de los namenodes en la configuración? –

+0

¿Dónde puedo hacer eso? Antes de ejecutar TeraSort, ejecuté TeraGen, que se completó con éxito, así que asumí que la configuración es correcta. ¿Cómo puedo verificar eso? –

Respuesta

0

El problema se estaba produciendo porque estaba implementando el trabajo en un NFS. Cambié el archivo hadoop.tmp.dir para dirigirlo a un sistema de archivos local (/ tmp) y el problema desapareció en un santiamén.

0

me dieron esto funcione de la siguiente manera:

estoy corriendo en modo local de mi directorio base hadoop, hadoop-1.0.0 con una entrada subdirectorio debajo de él, y me sale el mismo error que tú.

Edité el archivo java defectuoso para que registrara la ruta en lugar del nombre de archivo, lo reconstruí ("ant binary") y lo reordené. Estaba buscando el archivo en el directorio que estaba ejecutando. No tengo idea de si estaba buscando en el directorio base de hadoop o en el directorio de ejecución.

... así que hice un enlace simbólico en el directorio donde ejecuto terasort al señalar el archivo real en el directorio de entrada.

Es un truco barato, pero funciona.

- Tim. 
+0

No lo estoy ejecutando en modo local. Mi directorio de entrada reside en HDFS, no tengo forma de crear un enlace simbólico. Incluso sospecho que está buscando en mi sistema de archivos local, pero no entiendo por qué. Revisé los registros de mapred.input.dir y dice "> hdfs: // localhost: 54310/user/hduser/terasort-input", que dice hdfs. Es simplemente desconcertante –

0

¿Ha configurado la ejecución en modo pseudo distribuido (o en un clúster real)? A menos que configure Hadoop, se ejecutará en el modo local job runner (como libs dentro de un único proceso) - Terasort NO funciona en el modo LocalJobRunner. Busque la palabra LocalJobRunner en la salida para verificar.

Aquí hay un enlace a la configuración HDFS, SSH y rsync: http://hadoop.apache.org/docs/r1.1.1/single_node_setup.html#PseudoDistributed

0

estoy usando cloudera CDH4. se enfrentó a un problema similar con mi otro programa hadoop. cree que los problemas se trata de vincular las bibliotecas externas.

El programa funcionaba bien en Eclipse (modo local) pero cuando traté de ejecutarlo en modo pseudo distribuido, recibí este mensaje de error.

Solución temporal: - Se creó un archivo jar de Eclipse con la opción de manejo de la biblioteca: se copian las bibliotecas necesarias en una subcarpeta junto al JAR generado. - Copié el archivo JAR al directorio principal de hadoop (la ruta donde se ubican los archivos hadoop-exampls.jar)

con esta corrección puedo ejecutar el programa hadoop sin errores. espero que esto ayude

Cuestiones relacionadas