Cómo ejecutar un programa mapreduce distribuido
Si inicia el programa mapreduc directamente en el proyecto Eclipse de Windows, debe copiar el xml en el directorio de configuración del clúster hadoop al directorio src para que que el programa puede leer automáticamente Obtenga la dirección del clúster y luego ingrese la ejecución distribuida (también puede escribir su propio código Java para establecer las propiedades de configuración del trabajo).
Si no lo copia y no tiene el archivo de configuración xml completo en el directorio bin de su proyecto, todos los programas mapreduce ejecutados en Windows se ejecutarán a través del jvm local y el nombre del trabajo será con un nombre que contenga la palabra "local", como job_local2062122004_0001. Esta no es realmente una ejecución distribuida de mapreduce, ni tampoco una ejecución distribuida. Esta no es una ejecución verdaderamente distribuida del programa mapreduce.
Supongo que tenemos que estudiar el código fuente de org.apache.hadoop.conf. La configuración, de todos modos, el archivo de configuración xml afecta si el sistema de archivos ejecutado por mapreduce es el sistema de archivos local de Windows o el sistema hdfs remoto. También afecta si el asignador y el reductor ejecutados por mapreduce son jvm locales o jvm en la máquina del clúster; p>
Conclusión de este artículo
El primer punto es: al implementar mapreduce en Windows, el paquete jar debe descargarse en todos los nodos esclavos para poder ejecutar correctamente el programa mapreduce de manera distribuida. (Es necesario activar la operación distribuida mapreduce en Windows)
El segundo punto es: en Linux, simplemente copie el archivo jar al nodo maestro del clúster y ejecute el comando hadoop jarPackage.jar MainClassName para ejecutar mapreduce de forma distribuida programa.
El tercer punto: se recomienda utilizar el archivo adjunto para crear y cargar automáticamente el paquete jar y ejecutar el programa mapreduce de forma distribuida.
Adjunto 1, se recomienda utilizar este método: para realizar el empaquetado y la carga automática de jar y la ejecución distribuida del programa mapreduce:
Consulte la publicación del blog 5:
Análisis de envío de trabajos de Hadoop (1)~~ (5)
Consulte el archivo adjunto EJob.java en la publicación del blog del proyecto y luego agregue los siguientes métodos y código en el control principal. .
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 de la tarea. Utilice empaquetado en:
Job job = Job.
Job job = Job.getInstance(conf, "testAnaAction"
Agregar:
);String jarPath = createPack().getPath();
job.setJar(
Puede implementar la aplicación Java directamente en Windows para ejecutar programas mapreduce distribuidos sin necesidad de hacerlo manualmente. cargando archivos jar.
Apéndice 2. Resumen del proceso de prueba
(No tengo tiempo para leer, así que solo puedo resumir el método de prueba de una manera estúpida)
a. Haga clic derecho directamente a través del archivo java del programa principal de Windows Eclipse y luego "Ejecutar como aplicación" o seleccione el complemento de hadoop "Ejecutar en hadoop" para activar la prueba de ejecución del programa MapReduce.
1. Si no agrega el paquete jar al clúster en ninguna máquina Linux, se informará el siguiente error:
[trabajo] 2012-06-25 15: 42 :47,360 - org.apache.hadoop.mapreduce.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)
p>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.MapTask . run(MapTask.java. 339)
en org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:721)