hadoop - acción de la colmena que falla en oozie(en cloudera CDH 4.1.1)
hive (1)
Cuando ejecuto un script de colmena con oozie od CDH 4.1.1
La ejecución falla con:
Error Code JA018
Error Message org/apache/hadoop/hive/cli/CliDriver
Details
Property Value
External Id job_201211281608_0112
External Status FAILED/KILLED
Data None
Start time Sat, 01 Dec 2012 03:02:37
End time Sat, 01 Dec 2012 03:03:07
Id 0000007-121128160850795-oozie-oozi-W@ExchangeRateTest
Retries 0
TrackerUri overlord-datanode1:8021
Transition kill
La búsqueda en Google JA018 revela solo una pista críptica: JA018 es el directorio de salida que existe error en la acción de reducción de mapa de flujo de trabajo.
Copié mi hiv-site.xml a HDFS y lo configuré en workflow.xml: oozie.hive.defaults / user / hue / oozie / workspaces / overlord -oozie-1 / hive-site.xml
Aquí está el workflow.xml completo:
<workflow-app name="HiveTest" xmlns="uri:oozie:workflow:0.4">
<start to="ExchangeRateTest"/>
<action name="ExchangeRateTest">
<hive xmlns="uri:oozie:hive-action:0.2">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<prepare>
<delete path="${nameNode}${jobOutput}"/>
</prepare>
<configuration>
<property>
<name>oozie.use.system.libpath</name>
<value>true</value>
</property>
<property>
<name>oozie.hive.defaults</name>
<value>/user/hue/oozie/workspaces/_overlord_-oozie-1/hive-site.xml</value>
</property>
</configuration>
<script>/user/hue/oozie/workspaces/_overlord_-oozie-1/03_update_exchange_rates_final.hive</script>
<param>OUTPUT=${jobOutput}</param>
</hive>
<ok to="end"/>
<error to="kill"/>
</action>
<kill name="kill">
<message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<end name="end"/>
</workflow-app>
¿Cómo puede hacer que esto funcione?
La clase org/apache/hadoop/hive/cli/CliDriver
es necesaria para la ejecución de una acción Hive. Esto es obvio a partir del mensaje de error. Esta clase se encuentra dentro de este archivo jar: hive-cli-0.7.1-cdh3u5.jar
. (En mi caso cdh3u5 en mi versión de cloudera).
Oozie busca este jar en el directorio ShareLib
. La ubicación de este directorio generalmente se configura en hive-site.xml
, con el nombre de la propiedad como oozie.service.WorkflowAppService.system.libpath
, por lo que Oozie debe encontrar el contenedor fácilmente.
Pero en mi caso, hive-site.xml
no incluyó esta propiedad, por lo que Oozie no sabía dónde buscar este jar, de ahí el java.lang.NoClassDefFoundError
.
Para resolver esto, tuve que incluir un parámetro en mi archivo job.properties para señalar oozie a la ubicación del directorio ShareLib
, de la siguiente manera: oozie.libpath=${nameNode}/user/oozie/share/lib
. (depende de dónde esté configurado el directorio de SharedLib
en su clúster).