oozieIniziare con Oozie


Osservazioni

Oozie è un progetto open source Apache, originariamente sviluppato su Yahoo. Oozie è un sistema di pianificazione generale per lavori Hadoop multistadio.

  • Oozie consente di formare un raggruppamento logico di lavori Hadoop rilevanti in un'entità chiamata Workflow . I flussi di lavoro di Oozie sono DAG (grafico ciclico diretto) delle azioni.
  • Oozie fornisce un modo per pianificare il flusso di lavoro dipendente dal tempo o dai dati utilizzando un'entità denominata Coordinator .
  • Inoltre è possibile combinare i relativi coordinatori in un'entità denominata Bundle e possono essere pianificati su un server Oozie per l'esecuzione.

Oozie supporta la maggior parte dei lavori di Hadoop come Oozie Action Nodes come: MapRedude , Java , FileSystem (operazioni HDFS), Hive , Hive2 , Pig , Spark , SSH , Shell , DistCp e Sqoop . Fornisce una capacità decisionale utilizzando un'azione Decision Control Node e l'esecuzione parallela dei lavori utilizzando il Fork-Join Control Node . Permette agli utenti di configurare l'opzione email per la notifica di successo / fallimento del flusso di lavoro tramite l'azione Email .

Versioni

Versione Oozie Data di rilascio
4.3.0 2016/12/02

Installazione o configurazione

Pre-requisiti

Questo articolo ha dimostrato l'installazione di oozie-4.3.0 su Hadoop 2.7.3

  1. Java 1.7+
  2. Hadoop 2.x (qui, 2.7.3)
  3. Maven3 +
  4. Scatola Unix

Passaggio 1: file Dist

Ottieni il file oozie tar.gz da http://www-eu.apache.org/dist/oozie/4.3.0/ ed estrailo

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

Step2: Costruisci Oozie

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

Passaggio 3: installazione del server

Copia i binari compilati nella directory home come 'oozie'

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

Passaggio 3.1: libext Crea una directory di libext nella directory di oozie

 cd $HOME/oozie
 mkdir libext
 

Nota : libreria ExtJS (2.2+) (facoltativa, per abilitare Oozie webconsole) Ma, la libreria ExtJS non è in bundle con Oozie perché usa una licenza diversa :( Ora devi mettere i jar di hadoop nella directory di libext, altrimenti getterà sotto errore nel file oozie.log

WARN ActionStartXCommand: 523 - SERVER [data01.teg.io] USER [hadoop] GRUPPO [-] TOKEN [] APP [map-reduce-wf] LAVORO [0000000-161215143751620-oozie-hado-W] AZIONE [0000000-161215143751620- oozie-hado-W @ mr-node] Errore durante l'avvio dell'azione [mr-node]. ErrorType [TRANSIENT], ErrorCode [JA009], Message [JA009: Impossibile inizializzare il cluster. Controlla la tua configurazione per mapreduce.framework.name e gli indirizzi corrispondenti del server.]

Quindi, mettiamo sotto i jar all'interno della directory di 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/
 

Passaggio 3.2: Impersonare Oozie Per evitare di impersonare errori su oozie, modificare core-site.xml come di seguito

<!-- 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>
 

Supponendo, il mio utente oozie è huser e l'host è localhost e il gruppo è 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: è possibile utilizzare * in tutti i valori, in caso di confusione

Passaggio 3.3: Preparare la guerra

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

Questo creerà il file oozie.war nella directory oozie. Se questa guerra verrà utilizzata ulteriormente, potresti riscontrare questo errore:

ERRORE ActionStartXCommand: 517 - SERVER [data01.teg.io] USER [hadoop] GRUPPO [-] TOKEN [] APP [map-reduce-wf] LAVORO [0000000-161220104605103-oozie-hado-W] AZIONE [0000000-161220104605103- oozie-hado-W @ mr-node] Errore, java.lang.NoSuchFieldError: HADOOP_CLASSPATH

Perché? perché, la compilation oozie produceva i jar Hadoop 2.6.0 anche quando si specificava Hadoop 2.7.3 con l'opzione "-Dhadoop.version = 2.7.3".

Quindi, per evitare questo errore, copia il file oozie.war in una directory diversa

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/
 

Quindi, rigenera i binari di oozie.war per oozie con una guerra preparatoria

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

Passaggio 3.4: creare sharelib su HDFS

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

Ora, questa impostazione di sharelib potrebbe darti di seguito l'errore:

org.apache.oozie.service.ServiceException: E0104: impossibile inizializzare completamente il servizio [org.apache.oozie.service.ShareLibService], non in grado di memorizzare nella cache sharelib. Un amministratore deve installare sharelib con oozie-setup.sh e inviare il comando CLI 'oozie admin' per aggiornare sharelib

Per evitare ciò, modifica oozie-site.xml come di seguito

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

Aggiungi sotto la proprietà

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

Il valore dovrebbe essere $ HADOOP_HOME / etc / hadoop, dove sono presenti tutti i file di configurazione hadoop.

Passaggio 3.5: Crea Oozie DB

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

Passaggio 3.6: Avvia il daemon

Per avviare Oozie come demone utilizzare il seguente comando:

./bin/oozied.sh start
 

Fermare

./bin/oozied.sh stop
 

controlla i log per eventuali errori

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

Utilizzare il seguente comando per verificare lo stato di Oozie dalla riga di comando:

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

Passaggio 4: Installazione client

$ 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
 

Aggiungi $ HOME / oozie-client / bin alla variabile PATH nel file .bashrc e riavvia il tuo terminale o fallo

source $HOME/.bashrc
 

Per maggiori dettagli sulla configurazione, puoi consultare questo URL https://oozie.apache.org/docs/4.3.0/DG_QuickStart.html

Ora puoi inviare lavori hadoop a oozie nel tuo terminale.

Per eseguire un esempio, puoi seguire questo URL e impostare il tuo primo esempio per eseguire https://oozie.apache.org/docs/4.3.0/DG_Examples.html

Potresti riscontrare un errore di sotto mentre esegui la mappa riduci l'esempio nell'URL sopra

java.io.IOException: java.net.ConnectException: chiamata da localhost.localdomain / 127.0.0.1 a 0.0.0.0:10020 non riuscita sull'eccezione di connessione: java.net.ConnectException: connessione rifiutata; Per maggiori dettagli vedi: http://wiki.apache.org/hadoop/ConnectionRefused

Soluzione: avviare mr-jobhistory-server.sh

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

Un altro punto da notare sulla modifica del file job.properties è:

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

nel tuo caso, questo può essere diverso, dato che sto usando apache hadoop, potresti usare cloudera / hdp / qualsiasi cosa

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