Red de conocimiento del abogados - Preguntas y respuestas jurídicas - Acerca de los problemas operativos de Hadoop distribuido en WINDOWS

Acerca de los problemas operativos de Hadoop distribuido en WINDOWS

Si inicia el programa mapreduc directamente en el proyecto Eclipse de Windows, primero debe copiar todo el xml en el directorio de configuración del clúster hadoop al directorio src, para que el programa pueda leer automáticamente el dirección del clúster y luego distribuirlo Ejecutar (también puede escribir su propio código Java para establecer las propiedades de configuración del trabajo).

Si no copia y el directorio bin en el proyecto no tiene un archivo de configuración xml completo, todos los programas mapreduce ejecutados por Windows se ejecutarán a través del jvm local y el nombre del trabajo también será un trabajo con la palabra "local", como job_local2062122004_0001. Este no es un verdadero programa mapreduce distribuido.

Supongo que necesito estudiar el código fuente de org.apache.hadoop.conf.Configuration. De todos modos, el archivo de configuración xml afectará si el sistema de archivos utilizado para ejecutar mapreduce es el sistema de archivos local de Windows o el sistema hdfs remoto también tiene efectos sobre si el asignador y el reductor de mapreduce son ejecutados por la jvm local o la jvm de la máquina en el clúster

II. p> El primer punto es: para ejecutar mapreduce en Windows, se debe instalar jar. Solo cuando todos los nodos esclavos estén incluidos se podrá ejecutar correctamente el programa mapreduce de manera distribuida. (Tengo el requisito de activar una operación distribuida mapreduce en Windows)

El segundo punto es: en Linux, simplemente copie el archivo jar al maestro del clúster y ejecute el comando hadoop jarPackage.jar MainClassName Ejecute mapreduce. programas de forma distribuida.

El tercer punto es: se recomienda utilizar el Anexo 1, que implementa el programa mapreduce que crea y carga automáticamente paquetes jar y realiza ejecución distribuida.

Adjunto 1. Se recomienda utilizar este método: realizar el paquete jar automático y cargarlo, ejecutar el programa mapreduce distribuido:

Consulte primero las cinco publicaciones del blog:

Análisis de envío de trabajos de Hadoop (1)~~ (5)

Cite EJob.java en el archivo adjunto de la publicación del blog de su proyecto y luego agregue los siguientes métodos y código a main.

El archivo público estático createPack() arroja IOException {

Archivo jarFile = EJob.createTempJar("bin");

ClassLoader classLoader = EJob.getClassLoader() ;

Thread.currentThread().setContextClassLoader(classLoader);

devuelve jarFile;

}

Se utiliza en el código de inicio del trabajo. :

Trabajo de trabajo = Job.getInstance(conf, "testAnaAction");

Agregar:

String jarPath = createPack().getPath(); /p>

job.setJar(jarPath);

Puede ejecutar directamente como una aplicación Java para ejecutar programas mapreduce distribuidos en Windows sin cargar archivos jar manualmente.

Anexo 2. Proceso de prueba para sacar conclusiones

(No tengo tiempo para leer libros, así que solo puedo sacar conclusiones mediante métodos de prueba estúpidos)

1. Haga clic derecho directamente en el archivo java del programa principal a través de Eclipse en Windows y luego "ejecutar como aplicación" o seleccione el complemento de hadoop "ejecutar en hadoop" para activar la prueba del programa MapReduce.

1. Si el paquete jar no está instalado en ninguna máquina Linux del clúster, informará el siguiente error:

[trabajo] 2012-06-25 15:42: 47,360 - org.apache .hadoop.mapreduce.Job -10244 [principal] INFORMACIÓN org.apache.hadoop.mapreduce.Job - mapa 0% reducir 0%

[trabajo] 2012-06-25 15: 42:52,223 - org .apache.hadoop.mapreduce.Job -15107 [principal] INFORMACIÓN org.apache.hadoop.mapreduce.Job - ID de tarea: intento_1403517983686_0056_m_000000_0, estado: FALLADO

Error: java.lang. RuntimeException: java.lang .ClassNotFoundException: Clase bookCount.BookCount$BookCountMapper no encontrada

en org.apache.hadoop.conf.Configuration.getClass(Configuration.java:1720)

en org.apache.hadoop .mapreduce.task.JobContextImpl.getMapperClass(JobContextImpl.java:186)

en org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:721)

en org .apache.hadoop.mapred.MapTask.run(MapTask.java:339)

en org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:162)

en java.security.AccessController.doPrivileged(Método nativo)

en javax.security.auth.Subject.doAs(Subject.java:415)

en org.apache.hadoop .security.UserGroupInformation.doAs(UserGroupInformation.java:1491)

en org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:157)

Causado por: java .lang.ClassNotFoundException: Clase bookCount.BookCount$BookCountMapper no encontrada

en org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:1626)

en org.apache .hadoop.conf.Configuration.getClass(Configuration.java:1718)

... 8 más

# Error: repetir tres veces

2012-06-25 1

5:44:53,234 - org.apache.hadoop.mapreduce.Job -37813 [principal] INFORMACIÓN org.apache.hadoop.mapreduce.Job - mapa 100% reducir 100%

El fenómeno es: error, sin progreso, sin resultados en ejecución.

2. Copie el paquete jar al directorio $HADOOP_HOME/share/hadoop/mapreduce/ del "único" clúster maestro, directamente a través del eclipse "ejecutar como aplicación" de Windows y a través del complemento hadoop. en "ejecutar en hadoop" Para activar la ejecución, informa el mismo error que el anterior.

El fenómeno es: informe de errores, sin progreso y sin resultados en ejecución.

3. Copie el paquete jar al directorio $HADOOP_HOME/share/hadoop/mapreduce/ de algunos esclavos en el clúster, directamente a través de eclipse "ejecutar como aplicación" en Windows y a través del complemento hadoop ". ejecutar en hadoop" Ejecución del desencadenador

y error:

Error: java.lang.RuntimeException: java.lang.ClassNotFoundException: clase bookCount.BookCount$BookCountMapper no encontrada

en org .apache.hadoop.conf.Configuration.getClass(Configuration.java:1720)

en org.apache.hadoop.mapreduce.task.JobContextImpl.getMapperClass(JobContextImpl.java:186)

Y error:

Error: java.lang.RuntimeException: java.lang.ClassNotFoundException: Clase bookCount.BookCount$BookCountReducer no encontrado

El fenómeno es: allí es un error, pero todavía hay progreso, hay resultados en ejecución.

4. Copie el paquete jar en el directorio $HADOOP_HOME/share/hadoop/mapreduce/ de todos los esclavos en el clúster y actívelo directamente a través del eclipse "ejecutar como aplicación" de Windows y el complemento hadoop. -en "ejecutar en hadoop" Ejecución:

El fenómeno es: sin errores, progreso y resultados de la operación.

La primera conclusión es: para ejecutar mapreduce en Windows, el paquete jar debe estar instalado en todos los nodos esclavos para ejecutar correctamente el programa mapreduce de forma distribuida.

2. Utilice el siguiente comando para activar la prueba del programa MapReduce en Linux.

jar de hadoop $HADOOP_HOME/share/hadoop/mapreduce/bookCount.jar bookCount.BookCount

1, solo se copia en el maestro y se ejecuta en el maestro.

El fenómeno es: sin errores, progreso y resultados en ejecución.

2. Copie cualquier nodo esclavo y ejecútelo en el esclavo.

El fenómeno es: sin errores, progreso y resultados en ejecución.

Sin embargo, cuando se ejecuta en algunos nodos, se informará el siguiente error y los resultados de la ejecución son los siguientes.

14/06/25 16:44:02 INFORMACIÓN mapreduce.JobSubmitter: Limpiando el área de preparación /tmp/hadoop-yarn/staging/hduser/.staging/job_1403517983686_0071

Excepción en el hilo "principal" java.lang.NoSuchFieldError: DEFAULT_MAPREDUCE_APPLICATION_CLASSPATH

en org.apache.hadoop.mapreduce.v2.util.MRApps.setMRFrameworkClasspath(MRApps.java:157)

en org.apache.hadoop.mapreduce.v2.util.MRApps.setClasspath(MRApps.java:198)

en org.apache.hadoop.mapred.YARNRunner.createApplicationSubmissionContext(YARNRunner.java:443)

en org.apache.hadoop.mapred.YARNRunner.submitJob(YARNRunner.java:283)

en org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:415 )

en org.apache.hadoop.mapreduce.Job$10.run(Job.java:1268)

en org.apache.hadoop.mapreduce.Job$10.run(Job .java:1265)

en java.security.AccessController.doPrivileged(Método nativo)

en javax.security.auth.Subject.doAs(Subject.java:415) p>

en org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1491)

en org.apache.hadoop.mapreduce.Job.submit(Job.java: 1265)

en org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:1286)

en com.etrans.anaSpeed.AnaActionMr.run(AnaActionMr.java: 207)

en org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)

en com.etrans.anaSpeed.AnaActionMr.main(AnaActionMr.java: 44)

en sun.reflect.NativeMethodAccessorImpl.invoke0(Método nativo)

en sun.reflect.NativeMethodAccessorImpl.invoke(

NativeMethodAccessorImpl.java:57)

en sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

en java.lang.reflect.Method.invoke(Method.java: 606)

en org.apache.hadoop.util.RunJar.main(RunJar.java:212)

La segunda conclusión es: en Linux, simplemente copie el archivo jar en On el maestro del clúster, ejecute el comando hadoop jarPackage.jar MainClassName para ejecutar el programa mapreduce de forma distribuida.