java hadoop mapreduce oozie avro

Oozie: ¿Lanzamiento Map-Reduce de la acción Ojaz<java>?



hadoop mapreduce (1)

> ¿Cómo obtengo el resultado de MapReduce ...

De vuelta a lo fundamental.

Como no le importa mencionar qué versión de Hadoop y qué versión de Oozie está utilizando, asumiré una configuración "reciente" (por ejemplo, Hadoop 2.7 con TimelineServer y Oozie 4.2). Y dado que no mencionas qué tipo de interfaz utilizas (línea de comando? Oozie / Yarn UI nativa? Hue?), 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 el "ID de trabajo" apropiado 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 Java está atascada en modo PREP, Oozie no pudo enviarla a YARN; de lo contrario, encontrará algo como job_1449681681381_5858 en "ID externo". ¡Pero cuidado! El prefijo de job es una cosa heredada; el ID real de YARN es application_1449681681381_5858 .

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

Muestra el registro de Oozie, como podría esperarse.

> yarn logs -applicationId application_1449681681381_5858

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

En caso de que su acción Java genere con éxito otro trabajo YARN, y haya tenido cuidado de mostrar el "ID de aplicación" secundario, debería poder recuperarlo allí y ejecutar otro comando de yarn logs contra él.

Disfrute de sus próximos 5 días de depuración ;-)

Estoy tratando de ejecutar una tarea Map-Reduce en un flujo de trabajo de Oozie usando una acción <java> .

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 programas 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 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 con este enfoque.

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

<java> <!-- Namenode etc. in global configuration --> <prepare> <delete path="${transformOut}" /> </prepare> <configuration> <property> <name>mapreduce.job.queuename</name> <value>default</value> </property> </configuration> <main-class>package.containing.TransformTool</main-class> <arg>${transformIn}</arg> <arg>${transformOut}</arg> <file>${avroJar}</file> <file>${avroMapReduceJar}</file> </java>

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" anterior 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 MapReduce? ¿Estoy usando las llamadas API incorrectas?

No estoy muy dispuesto a usar la acción Oozie <map-reduce> , ya que cada acción en el flujo de trabajo se basa en varios esquemas AVRO versionados por separado.

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

Gracias por cualquier ayuda.