oozieEmpezando con oozie


Observaciones

Oozie es un proyecto de código abierto Apache, desarrollado originalmente en Yahoo. Oozie es un sistema de programación de propósito general para trabajos de Hadoop de varias etapas.

  • Oozie permite formar una agrupación lógica de trabajos Hadoop relevantes en una entidad llamada Workflow . Los flujos de trabajo de Oozie son DAG (Gráfico cíclico dirigido) de acciones.
  • Oozie proporciona una forma de programar el flujo de trabajo dependiente de la hora o los datos utilizando una entidad llamada Coordinator .
  • Además, puede combinar los Coordinadores relacionados en una entidad llamada Bundle y puede programarse en un servidor Oozie para su ejecución.

Oozie admite la mayoría de los trabajos Hadoop como nodos de acción Oozie como: MapRedude , Java , FileSystem (operaciones HDFS), Hive , Hive2 , Pig , Spark , SSH , Shell , DistCp y Sqoop . Proporciona una capacidad de decisión utilizando una acción de Decision Control Node decisión y la ejecución paralela de los trabajos utilizando el Fork-Join Control Node . Permite a los usuarios configurar la opción de correo electrónico para la notificación de éxito / falla del flujo de trabajo mediante la acción de Email .

Versiones

Versión de Oozie Fecha de lanzamiento
4.3.0 2016-12-02

Instalación o configuración

Requisitos previos

Este artículo demostró la instalación de oozie-4.3.0 en Hadoop 2.7.3

  1. Java 1.7+
  2. Hadoop 2.x (aquí, 2.7.3)
  3. Maven3 +
  4. Caja de Unix

Paso 1: archivo dist

Obtenga el archivo oozie tar.gz desde http://www-eu.apache.org/dist/oozie/4.3.0/ y extráigalo

cd $HOME
tar -xvf oozie-4.3.0.tar.gz
 

Paso 2: Construir Oozie

cd $HOME/oozie-4.3.0/bin
./mkdistro.sh -DskipTests
 

Paso 3: Instalación del servidor

Copie los archivos binarios construidos en el directorio de inicio como 'oozie'

cd $HOME
cp -R $HOME/oozie-4.3.0/distro/target/oozie-4.3.0-distro/oozie-4.3.0 .
 

Paso 3.1: libext Crear el directorio libext dentro del directorio oozie

 cd $HOME/oozie
 mkdir libext
 

Nota : biblioteca ExtJS (2.2+) (opcional, para habilitar la consola web de Oozie) Sin embargo, la biblioteca ExtJS no se incluye con Oozie porque usa una licencia diferente :( Ahora debe colocar los archivos hadoop en el directorio libext, de lo contrario se lanzará a continuación error en el archivo oozie.log

WARN ActionStartXCommand: 523 - SERVIDOR [data01.teg.io] USUARIO [hadoop] GRUPO [-] TOKEN [] APLICACIÓN [map-reduce-wf] TRABAJO [0000000-161215143751620-oozie-hado-W] ACCIÓN [0000000-16121514143751620- oozie-hado-W @ mr-node] Error al iniciar la acción [mr-node]. ErrorType [TRANSIENT], ErrorCode [JA009], Mensaje [JA009: No se puede inicializar Cluster. Verifique su configuración para mapreduce.framework.name y las direcciones de servidor correspondientes.]

Entonces, vamos a poner debajo de los frascos dentro del directorio libext

cp $HADOOP_HOME/share/hadoop/common/*.jar oozie/libext/
cp $HADOOP_HOME/share/hadoop/common/lib/*.jar oozie/libext/
cp $HADOOP_HOME/share/hadoop/hdfs/*.jar oozie/libext/
cp $HADOOP_HOME/share/hadoop/hdfs/lib/*.jar oozie/libext/
cp $HADOOP_HOME/share/hadoop/mapreduce/*.jar oozie/libext/
cp $HADOOP_HOME/share/hadoop/mapreduce/lib/*.jar oozie/libext/
cp $HADOOP_HOME/share/hadoop/yarn/*.jar oozie/libext/
cp $HADOOP_HOME/share/hadoop/yarn/lib/*.jar oozie/libext/
 

Paso 3.2: Oozie Impersonate Para evitar el error de suplantación en oozie, modifique core-site.xml como a continuación

<!-- OOZIE -->
  <property>
    <name>hadoop.proxyuser.[OOZIE_SERVER_USER].hosts</name>
    <value>[OOZIE_SERVER_HOSTNAME]</value>
  </property>
  <property>
    <name>hadoop.proxyuser.[OOZIE_SERVER_USER].groups</name>
    <value>[USER_GROUPS_THAT_ALLOW_IMPERSONATION]</value>
  </property>
 

Asumiendo, mi usuario de oozie es huser y el host es localhost y el grupo es hadoop

<!-- OOZIE -->
  <property>
    <name>hadoop.proxyuser.huser.hosts</name>
    <value>localhost</value>
  </property>
  <property>
    <name>hadoop.proxyuser.huser.groups</name>
    <value>hadoop</value>
  </property>
 

Nota: Puedes usar * en todos los valores, en caso de confusión.

Paso 3.3: Preparar la guerra.

cd $HOME/oozie/bin
./oozie-setup.sh prepare-war
 

Esto creará el archivo oozie.war dentro del directorio oozie. Si esta guerra se usará más, puede enfrentar este error:

ERROR ActionStartXCommand: 517 - SERVIDOR [data01.teg.io] USUARIO [hadoop] GRUPO [-] TOKEN [] APP [map-reduce-wf] TRABAJO [0000000-161220104605103-oozie-hado-W] ACCIÓN [0000000-1612201046051053- oozie-hado-W @ mr-node] Error, java.lang.NoSuchFieldError: HADOOP_CLASSPATH

¿Por qué? porque, La compilación de oozie produjo archivos Hadoop 2.6.0 incluso al especificar Hadoop 2.7.3 con la opción "-Dhadoop.version = 2.7.3".

Entonces, para evitar este error, copie el archivo oozie.war en un directorio diferente

mkdir $HOME/oozie_war_dir
cp $HOME/oozie/oozie.war $HOME/oozie_war_dir
cd $HOME/oozie_war_dir
jar -xvf oozie.war
rm -f oozie.war/WEB-INF/lib/hadoop-*.jar
rm -f oozie.war/WEB-INF/lib/hive-*.jar
rm oozie.war
jar -cvf oozie.war ./*
cp oozie.war $HOME/oozie/
 

Luego, regenera los binarios oozie.war para oozie con una guerra de preparación

cd $HOME/oozie/bin
./oozie-setup.sh prepare-war
 

Paso 3.4: Crear sharelib en HDFS

cd $HOME/oozie/bin
./oozie-setup.sh sharelib create -fs hdfs://localhost:9000
 

Ahora, esta configuración de sharelib puede darte un error a continuación:

org.apache.oozie.service.ServiceException: E0104: No se pudo inicializar completamente el servicio [org.apache.oozie.service.ShareLibService], no se pudo almacenar en caché sharelib. Un administrador necesita instalar el sharelib con oozie-setup.sh y emitir el comando CLI 'oozie admin' para actualizar el sharelib

Para evitar esto, modifique oozie-site.xml como a continuación

cd $HOME/oozie
vi conf/oozie-site.xml
 

Añadir propiedad abajo

<property>
    <name>oozie.service.HadoopAccessorService.hadoop.configurations</name> 
    <value>*=/usr/local/hadoop/etc/hadoop/</value>
</property>
 

El valor debe ser su $ HADOOP_HOME / etc / hadoop, donde están presentes todos los archivos de configuración de hadoop.

Paso 3.5: Crear Oozie DB

cd $HOME/oozie
./bin/ooziedb.sh create -sqlfile oozie.sql -run
 

Paso 3.6: Iniciar Daemon

Para iniciar Oozie como demonio use el siguiente comando:

./bin/oozied.sh start
 

Para detener

./bin/oozied.sh stop
 

verifique los registros para los errores, si los hay

cd $HOME/oozie/logs
tail -100f oozie.log
 

Use el siguiente comando para verificar el estado de Oozie desde la línea de comandos:

$ ./bin/oozie admin -oozie http://localhost:11000/oozie -status
System mode: NORMAL
 

Paso 4: Instalación del cliente

$ cd
$ cp oozie/oozie-client-4.3.0.tar.gz .
$ tar -xvf oozie-client-4.3.0.tar.gz
$ mv oozie-client-3.3.2 oozie-client
$ cd bin
 

Agregue $ HOME / oozie-client / bin a la variable PATH en el archivo .bashrc y reinicie su terminal o haga

source $HOME/.bashrc
 

Para obtener más detalles sobre la configuración, puede consultar esta URL https://oozie.apache.org/docs/4.3.0/DG_QuickStart.html

Ahora puede enviar trabajos de hadoop a oozie en su terminal.

Para ejecutar un ejemplo, puede seguir esta URL y configurar su primer ejemplo para ejecutar https://oozie.apache.org/docs/4.3.0/DG_Examples.html

Puede enfrentar el error de abajo mientras ejecuta el ejemplo de reducción de mapa en la URL anterior

java.io.IOException: java.net.ConnectException: la llamada desde localhost.localdomain / 127.0.0.1 a 0.0.0.0:10020 falló en la excepción de conexión: java.net.ConnectException: conexión rechazada; Para más detalles vea: http://wiki.apache.org/hadoop/ConnectionRefused

Solución: Inicie mr-jobhistory-server.sh

cd $HADOOP_HOME/sbin
./mr-jobhistory-server.sh start historyserver
 

Otro punto a tener en cuenta sobre la modificación del archivo job.properties es:

nameNode=hdfs://localhost:9000
jobTracker=localhost:8032
 

en su caso, esto puede ser diferente, ya que estoy usando apache hadoop, puede estar usando cloudera / hdp / cualquiera

To run spark job, I have tried running in local[*], yarn-client and
yarn-cluster as master, but succeeded in local[*] only