Oozie: Lanza Map-Reduce from Oozie action?

Estoy intentando ejecutar una tarea Map-Reduce en un flujo de trabajo Oozie usando una acción .

Apache Oozie de O’Reilley (Islam y Srinivasan 2015) señala que:

Si bien no se recomienda, la acción de Java se puede utilizar para ejecutar trabajos de Hadoop MapReduce porque los trabajos de MapReduce no son más que progtwigs de Java después de todo. La clase principal invocada puede ser un controlador Hadoop MapReduce y puede llamar a las API de Hadoop para ejecutar un trabajo de MapReduce. En ese modo, Hadoop genera más mapeadores y reductores según sea necesario y los ejecuta en el clúster.

Sin embargo, no estoy teniendo éxito usando este enfoque.

La definición de acción en el flujo de trabajo se ve así:

        mapreduce.job.queuename default   package.containing.TransformTool ${transformIn} ${transformOut} ${avroJar} ${avroMapReduceJar}  

La implementación main() implementación de la herramienta se ve así:

 public static void main(String[] args) throws Exception { int res = ToolRunner.run(new TransformTool(), args); if (res != 0) { throw new Exception("Error running MapReduce."); } } 

El flujo de trabajo se bloqueará con la excepción “Error al ejecutar MapReduce” arriba cada vez; ¿Cómo obtengo el resultado de MapReduce para diagnosticar el problema? ¿Hay algún problema con el uso de esta Tool para ejecutar una aplicación de MapReduce? ¿Estoy usando las llamadas API incorrectas?

No estoy muy dispuesto a usar la acción Oozie , ya que cada acción en el flujo de trabajo se basa en varios esquemas AVRO con versiones separadas.

¿Cuál es el problema aquí? Estoy usando la API ‘nueva’ mapreduce para la tarea.

Gracias por cualquier ayuda.

> cómo obtengo el resultado de MapReduce …

De vuelta a lo basico.

Como no le importa mencionar qué versión de Hadoop y qué versión de Oozie está utilizando, supongo que tendrá una configuración “reciente” (p. Ej., Hadoop 2.7 con TimelineServer y Oozie 4.2). Y dado que no mencionas qué tipo de interfaz utilizas (línea de comando? Nativo Oozie / Yarn UI? Hue?) Voy a dar algunos ejemplos usando good’old’CLI.

> oozie jobs -localtime -len 10 -filter name=CrazyExperiment

Muestra las últimas 10 ejecuciones del flujo de trabajo “CrazyExperiment”, para que pueda inyectar la “Id. De trabajo” adecuada en los siguientes comandos.

> oozie job -info 0000005-151217173344062-oozie-oozi-W

Muestra el estado de esa ejecución, desde el punto de vista de Oozie. Si su acción de Java está atascada en el modo PREP, entonces Oozie no pudo enviarlo a YARN; de lo contrario, encontrará algo como job_1449681681381_5858 en “External ID”. ¡Pero cuidado! El prefijo de job es un legado; el ID de YARN real es application_1449681681381_5858 .

> oozie job -log 0000005-151217173344062-oozie-oozi-W

Muestra el registro de Oozie, como era de esperar.

> yarn logs -applicationId application_1449681681381_5858

Muestra los registros consolidados para AppMaster (contenedor n. ° 1) y el iniciador de acciones de Java (contenedor n. ° 2): una vez finalizada la ejecución. El registro de stdout para Launcher contiene una gran cantidad de cosas de depuración de Oozie, la stdout real está en la parte inferior.

En el caso de que su acción Java generara con éxito otro trabajo YARN, y tuviera cuidado de mostrar el “ID de aplicación” hijo, debería poder recuperarlo allí y ejecutar otro comando de yarn logs contra él.

Disfruta tus próximos 5 días de depuración 😉