2012-03-16 15 views
6

He escrito mi propio programa hadoop y puedo ejecutarlo usando el modo pseudo-distribución en mi propio portátil, sin embargo, cuando coloco el programa en el clúster que puede ejecutar el jar de hadoop, por defecto inicia el trabajo local aunque indico la ruta del archivo hdfs, a continuación se muestra la salida, ¿da sugerencias?hadoop solo lanza trabajo local de forma predeterminada ¿por qué?

./hadoop -jar MyRandomForest_oob_distance.jar hdfs://montana-01:8020/user/randomforest/input/genotype1.txt hdfs://montana-01:8020/user/randomforest/input/phenotype1.txt hdfs://montana-01:8020/user/randomforest/output1_distance/ hdfs://montana-01:8020/user/randomforest/input/genotype101.txt hdfs://montana-01:8020/user/randomforest/input/phenotype101.txt 33 500 1 
12/03/16 16:21:25 INFO jvm.JvmMetrics: Initializing JVM Metrics with processName=JobTracker, sessionId= 
12/03/16 16:21:25 WARN mapred.JobClient: Use GenericOptionsParser for parsing the arguments. Applications should implement Tool for the same. 
12/03/16 16:21:25 INFO mapred.JobClient: Running job: job_local_0001 
12/03/16 16:21:25 INFO mapred.MapTask: io.sort.mb = 100 
12/03/16 16:21:25 INFO mapred.MapTask: data buffer = 79691776/99614720 
12/03/16 16:21:25 INFO mapred.MapTask: record buffer = 262144/327680 
12/03/16 16:21:25 WARN mapred.LocalJobRunner: job_local_0001 
java.io.FileNotFoundException: File /user/randomforest/input/genotype1.txt does not exist. 
    at org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:361) 
    at org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:245) 
    at org.apache.hadoop.fs.ChecksumFileSystem$ChecksumFSInputChecker.<init>(ChecksumFileSystem.java:125) 
    at org.apache.hadoop.fs.ChecksumFileSystem.open(ChecksumFileSystem.java:283) 
    at org.apache.hadoop.fs.FileSystem.open(FileSystem.java:356) 
    at Data.Data.loadData(Data.java:103) 
    at MapReduce.DearMapper.loadData(DearMapper.java:261) 
    at MapReduce.DearMapper.setup(DearMapper.java:332) 
    at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:142) 
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:621) 
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:305) 
    at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:177) 
12/03/16 16:21:26 INFO mapred.JobClient: map 0% reduce 0% 
12/03/16 16:21:26 INFO mapred.JobClient: Job complete: job_local_0001 
12/03/16 16:21:26 INFO mapred.JobClient: Counters: 0 
Total Running time is: 1 secs 

Respuesta

9

LocalJobRunner ha sido elegido como su configuración más probable que tenga la propiedad mapred.job.tracker establecido en local o no se ha establecido en absoluto (en cuyo caso el valor por defecto es local). Para verificar, vaya a "donde haya extraído/instalado hadoop"/etc/hadoop/y vea si existe el archivo mapred-site.xml (para mí no lo hizo, un archivo llamado mapped-site.xml.template estaba allí). En ese archivo (o crearlo si no existe) asegurarse de que tiene la siguiente propiedad:

<configuration> 
<property> 
<name>mapreduce.framework.name</name> 
<value>yarn</value> 
</property> 
</configuration> 
  • ver la fuente de org.apache.hadoop.mapred.JobClient.init(JobConf)

¿Cuál es el valor de esta propiedad de configuración en la configuración de hadoop en la máquina desde la que está enviando esto? Confirme también que el archivo ejecutable de hadoop que está ejecutando hace referencia a esta configuración (y que no tiene más de 2 instalaciones configuradas de forma diferente) - escriba which hadoop y trace los enlaces simbólicos que encuentre.

alternativa, se puede anular este momento de enviar su trabajo, si se conoce el número de host y el puerto JobTracker usando la opción -jt:

hadoop jar MyRandomForest_oob_distance.jar -jt hostname:port hdfs://montana-01:8020/user/randomforest/input/genotype1.txt hdfs://montana-01:8020/user/randomforest/input/phenotype1.txt hdfs://montana-01:8020/user/randomforest/output1_distance/ hdfs://montana-01:8020/user/randomforest/input/genotype101.txt hdfs://montana-01:8020/user/randomforest/input/phenotype101.txt 33 500 1 
+1

Finalmente encuentro que la razón es porque uso -jar en lugar de jar mientras ejecuto el programa ... :( – user974270

+1

@ user974270 Pero por qué lanzará un trabajo local al usar -jar. ¿Conoces la razón? – thomaslee

+0

Yo soy enfrentando el mismo problema pero en modo distribuido de psuedo .. http://stackoverflow.com/questions/32787996/hadoop-help-required-to-understand-the-processing-steps?noredirect=1#comment53418582_32787996. Por favor ayuda. – Ajay

2

que tenía el mismo problema que cada mapreduce v2 (mrv2) o tarea lana solo corrió con la mapred.LocalJobRunner

INFO mapred.LocalJobRunner: Starting task: attempt_local284299729_0001_m_000000_0 

ResourceManager y Nodemanagers eran accesibles y el mapreduce.framework.name se establece en hilo.

Configurar el HADOOP_MAPRED_HOME antes de ejecutar el trabajo me arregló el problema.

export HADOOP_MAPRED_HOME=/usr/lib/hadoop-mapreduce 

aplausos dan

3

Si está utilizando Hadoop 2 y su trabajo se ejecuta localmente en lugar de en el clúster, asegúrese de que tiene la configuración mapred-site.xml para contener la propiedad mapreduce.framework.name con un valor de yarn. También necesita configurar un servicio auxiliar en yarn-site.xml

Consulte el Cloudera Hadoop 2 operator migration blog para obtener más información.

Cuestiones relacionadas