oozieErste Schritte mit Oozie


Bemerkungen

Oozie ist ein Open-Source-Projekt von Apache, das ursprünglich bei Yahoo entwickelt wurde. Oozie ist ein allgemeines Planungssystem für mehrstufige Hadoop-Jobs.

  • Oozie erlaubt es, eine logische Gruppierung relevanter Hadoop-Jobs in einer Entität namens Workflow . Bei den Oozie-Workflows handelt es sich um DAG (Directed Cyclic Graph) von Aktionen.
  • Oozie bietet eine Möglichkeit , Zeit oder Daten abhängig Workflow mit einem Unternehmen namens planen Coordinator .
  • Außerdem können Sie die zugehörigen Koordinatoren zu einer Entität mit dem Namen Bundle und zur Ausführung auf einem Oozie-Server einplanen.

Oozie unterstützt die meisten Hadoop-Jobs als Oozie-Aktionsknoten wie MapRedude , Java , FileSystem (HDFS-Operationen), Hive , Hive2 , Pig , Spark , SSH , Shell , DistCp und Sqoop . Es bietet eine Entscheidungsfunktion mithilfe einer Aktion " Decision Control Node und der parallelen Ausführung der Jobs unter Verwendung des Fork-Join Control Node . Es ermöglicht Benutzern, die E-Mail-Option für die Benachrichtigung über Erfolg / Fehler des Workflows mithilfe der Email Aktion zu konfigurieren.

Versionen

Oozie Version Veröffentlichungsdatum
4.3.0 2016-12-02

Installation oder Setup

Voraussetzungen

In diesem Artikel wurde die Installation von oozie-4.3.0 auf Hadoop 2.7.3 beschrieben

  1. Java 1.7+
  2. Hadoop 2.x (hier 2.7.3)
  3. Maven3 +
  4. Unix-Box

Schritt 1: Dist-Datei

Holen Sie sich die Datei oozie tar.gz von http://www-eu.apache.org/dist/oozie/4.3.0/ und extrahieren Sie sie

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

Schritt 2: Oozie bauen

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

Schritt 3: Serverinstallation

Kopieren Sie die erstellten Binärdateien als 'oozie' in das Home-Verzeichnis.

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

Schritt 3.1: libext Legt das libext-Verzeichnis im oozie-Verzeichnis an

 cd $HOME/oozie
 mkdir libext
 

Hinweis : ExtJS (2.2+) -Bibliothek (optional, um Oozie webconsole zu aktivieren) Die ExtJS-Bibliothek wird jedoch nicht mit Oozie gebündelt, da sie eine andere Lizenz verwendet: (Jetzt müssen Sie hadoop-Gläser im libext-Verzeichnis ablegen, sonst wird sie nach unten geworfen Fehler in der Datei oozie.log

WARN ActionStartXCommand: 523 - SERVER [data01.teg.io] USER [hadoop] GROUP [-] TOKEN [] APP [map-redu-wf]. oozie-hado-W @ mr-node] Fehler beim Starten der Aktion [mr-node]. ErrorType [TRANSIENT], ErrorCode [JA009], Nachricht [JA009: Cluster kann nicht initialisiert werden. Bitte überprüfen Sie Ihre Konfiguration für mapreduce.framework.name und die entsprechenden Serveradressen.]

Lassen Sie uns also unter jars in das libext-Verzeichnis stellen

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/
 

Schritt 3.2: Oozie-Identitätswechsel Um einen Identitätsfehler bei oozie zu vermeiden, ändern Sie core-site.xml wie folgt

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

Angenommen, mein Oozie-Benutzer ist huser und host ist localhost und group ist hadoop

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

Hinweis: Bei Verwirrung können Sie * in allen Werten verwenden

Schritt 3.3: Bereite den Krieg vor

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

Dadurch wird die oozie.war-Datei im oozie-Verzeichnis erstellt. Wenn dieser Krieg weiter verwendet wird, kann dieser Fehler auftreten:

ERROR ActionStartXCommand: 517 - SERVER [data01.teg.io] USER [hadoop] GROUP [-] TOKEN [] APP [map-redu-wf] Aktion JOB [0000000-161220104605103-oozie-hado-W] oozie-hado-W @ mr-node] Fehler, java.lang.NoSuchFieldError: HADOOP_CLASSPATH

Warum? Denn die Oozie-Kompilierung produzierte Hadoop 2.6.0-Jars, selbst wenn Hadoop 2.7.3 mit der Option "-Dhadoop.version = 2.7.3" angegeben wurde.

Um diesen Fehler zu vermeiden, kopieren Sie die Datei oozie.war in ein anderes Verzeichnis

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/
 

Dann regenerieren Sie die Oozie.war-Binaries für Oozie mit einem Vorbereitungskrieg

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

Schritt 3.4: Erstellen Sie eine Freigabe für HDFS

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

Nun kann diese Sharelib-Einstellung unter dem folgenden Fehler angezeigt werden:

org.apache.oozie.service.ServiceException: E0104: Dienst [org.apache.oozie.service.ShareLibService] konnte nicht vollständig initialisiert werden. Sharelib kann nicht zwischengespeichert werden. Ein Administrator muss die Sharelib mit oozie-setup.sh installieren und den CLI-Befehl "oozie admin" ausgeben, um die Sharelib zu aktualisieren

Um dies zu vermeiden, ändern Sie oozie-site.xml wie folgt

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

Fügen Sie unten Eigenschaft hinzu

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

Der Wert sollte Ihr $ HADOOP_HOME / etc / hadoop sein, wobei alle hadoop-Konfigurationsdateien vorhanden sind.

Schritt 3.5: Oozie DB erstellen

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

Schritt 3.6: Starten Sie Daemon

Um Oozie als Daemon zu starten, verwenden Sie den folgenden Befehl:

./bin/oozied.sh start
 

Stoppen

./bin/oozied.sh stop
 

Überprüfen Sie ggf. die Protokolle auf Fehler

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

Verwenden Sie den folgenden Befehl, um den Status von Oozie von der Befehlszeile aus zu überprüfen:

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

Schritt 4: Client-Installation

$ 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
 

Fügen Sie der PATH-Variable in der .bashrc-Datei $ HOME / oozie-client / bin hinzu, und starten Sie Ihr Terminal neu oder führen Sie einen Neustart durch

source $HOME/.bashrc
 

Weitere Informationen zum Einrichten finden Sie unter https://oozie.apache.org/docs/4.3.0/DG_QuickStart.html

Jetzt können Sie Hadoop-Jobs in Ihrem Terminal an oozie übergeben.

Um ein Beispiel auszuführen, können Sie dieser URL folgen und das erste Beispiel so einrichten, dass https://oozie.apache.org/docs/4.3.0/DG_Examples.html ausgeführt wird

Während der Ausführung der Karte kann ein Fehler unter der angegebenen URL auftreten

java.io.IOException: java.net.ConnectException: Aufruf von localhost.localdomain / 127.0.0.1 bis 0.0.0.0:10020 fehlgeschlagen bei Verbindungsausnahme: java.net.ConnectException: Verbindung abgelehnt; Weitere Informationen finden Sie unter: http://wiki.apache.org/hadoop/ConnectionRefused

Lösung: Starten Sie mr-jobhistory-server.sh

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

Ein weiterer zu beachtender Punkt zum Ändern der Datei job.properties ist:

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

In Ihrem Fall kann dies anders sein, da ich Apache Hadoop verwende. Möglicherweise verwenden Sie cloudera / hdp / irgendetwas

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