que - maquina virtual hadoop
¿no se puede ejecutar el ejemplo de cuenta de hadoop? (4)
Estoy ejecutando el ejemplo de cuenta de hadoop en el entorno de un solo nodo en ubuntu 12.04 en vmware. estoy ejecutando el ejemplo de esta manera: -
hadoop@master:~/hadoop$ hadoop jar hadoop-examples-1.0.4.jar wordcount
/home/hadoop/gutenberg/ /home/hadoop/gutenberg-output
Tengo un archivo de entrada en la siguiente ubicación:
/home/hadoop/gutenberg
y la ubicación para el archivo de salida es:
/home/hadoop/gutenberg-output
cuando ejecuto el programa de wordcount obtengo los siguientes errores:
13/04/18 06:02:10 INFO mapred.JobClient: Cleaning up the staging area
hdfs://localhost:54310/home/hadoop/tmp/mapred/staging/hadoop/.staging/job_201304180554_0001
13/04/18 06:02:10 ERROR security.UserGroupInformation: PriviledgedActionException
as:hadoop cause:org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory
/home/hadoop/gutenberg-output already exists
org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory
/home/hadoop/gutenberg-output already exists at
org.apache.hadoop.mapreduce.lib.output.FileOutputFormat.checkOutputSpecs(FileOutputFormat.j
ava:137) at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:887) at
org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:850) 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:1121) at
org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:850) at
org.apache.hadoop.mapreduce.Job.submit(Job.java:500) at
org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:530) at
org.apache.hadoop.examples.WordCount.main(WordCount.java:67) at
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616) at
org.apache.hadoop.util.ProgramDriver$ProgramDescription.invoke(ProgramDriver.java:68)
at org.apache.hadoop.util.ProgramDriver.driver(ProgramDriver.java:139) at
org.apache.hadoop.examples.ExampleDriver.main(ExampleDriver.java:64) at
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616) at
org.apache.hadoop.util.RunJar.main(RunJar.java:156) hadoop@master:~/hadoop$ bin/stop-
all.sh Warning: $HADOOP_HOME is deprecated. stopping jobtracker localhost: stopping
tasktracker stopping namenode localhost: stopping datanode localhost: stopping
secondarynamenode hadoop@master:~/hadoop$
Elimine el archivo de salida que ya existe o salga a un archivo diferente.
(Tengo curiosidad por saber qué otras interpretaciones del mensaje de error has considerado).
Como dijo Dave (y las excepciones), su directorio de salida ya existe. O bien tiene que enviar a un directorio diferente o eliminar el existente primero, usando:
hadoop fs -rmr /home/hadoop/gutenberg-output
compruebe si hay una carpeta ''tmp'' o no.
hadoop fs -ls /
si ve la carpeta de salida o ''tmp'' elimine ambos (considerando que no hay trabajos activos en ejecución)
hadoop fs -rmr / tmp
Si ha creado su propio .jar y está intentando ejecutarlo, preste atención:
Para ejecutar su trabajo, debe haber escrito algo como esto:
hadoop jar <jar-path> <package-path> <input-in-hdfs-path> <output-in-hdfs-path>
Pero si observa más de cerca su código de controlador, verá que ha configurado arg[0]
como su entrada y arg[1]
como su salida ... Lo mostraré:
FileInputFormart.addInputPath(conf, new Path(args[0]));
FileOutFormart.setOutputPath(conf, new Path(args[1]));
Pero, hadoop está tomando arg[0
] como <package-path>
lugar de <input-in-hdfs-path>
y arg [1] como <input-in-hdfs-path>
lugar de <output-in-hdfs-path>
Entonces, para que funcione, debes usar:
FileInputFormart.addInputPath(conf, new Path(args[1]));
FileOutFormart.setOutputPath(conf, new Path(args[2]));
Con arg[1]
y arg[2]
, ¡así obtendrá las cosas correctas! :) Espero que haya sido de ayuda. Aclamaciones.