Verwenden von Apache Oozie mit Apache Hadoop zum Definieren und Ausführen eines Workflows in Linux-basiertem Azure HDInsightUse Apache Oozie with Apache Hadoop to define and run a workflow on Linux-based Azure HDInsight

Hier erfahren Sie, wie Sie Apache Oozie mit Apache Hadoop in Azure HDInsight verwenden.Learn how to use Apache Oozie with Apache Hadoop on Azure HDInsight. Oozie ist ein Workflow- und Koordinationssystem zur Verwaltung von Hadoop-Aufträgen.Oozie is a workflow and coordination system that manages Hadoop jobs. Oozie ist in den Hadoop-Stack integriert und unterstützt die folgenden Aufträge:Oozie is integrated with the Hadoop stack, and it supports the following jobs:

  • Apache Hadoop MapReduceApache Hadoop MapReduce
  • Apache PigApache Pig
  • Apache HiveApache Hive
  • Apache SqoopApache Sqoop

Sie können Oozie auch dazu verwenden, bestimmte Aufträge für ein System zu planen, beispielsweise Java-Programme oder Shellskripts.You can also use Oozie to schedule jobs that are specific to a system, like Java programs or shell scripts.

Hinweis

Eine weitere Option zum Definieren von Workflows mit HDInsight ist die Verwendung von Azure Data Factory.Another option to define workflows with HDInsight is to use Azure Data Factory. Weitere Informationen zu Data Factory finden Sie unter Verwenden von Apache Pig und Apache Hive mit Data Factory.To learn more about Data Factory, see Use Apache Pig and Apache Hive with Data Factory. Informationen zur Verwendung von Oozie in Clustern mit dem Enterprise-Sicherheitspaket finden Sie unter Ausführen von Apache Oozie in in die Domäne eingebundenen HDInsight Hadoop-Clustern.To use Oozie on clusters with Enterprise Security Package please see Run Apache Oozie in HDInsight Hadoop clusters with Enterprise Security Package.

VoraussetzungenPrerequisites

BeispielworkflowExample workflow

Der in diesem Dokument verwendeten Workflows weist zwei Aktionen auf.The workflow used in this document contains two actions. Aktionen sind Definitionen von Aufgaben, z.B. das Ausführen von Hive, Sqoop, MapReduce oder anderen Prozessen:Actions are definitions for tasks, such as running Hive, Sqoop, MapReduce, or other processes:

HDInsight – Oozie-Workflowdiagramm

  1. Eine Hive-Aktion führt ein HiveQL-Skript zum Extrahieren von Datensätzen aus der in HDInsight enthaltenen Tabelle hivesampletable aus.A Hive action runs an HiveQL script to extract records from the hivesampletable that's included with HDInsight. Jede Datenzeile beschreibt einen Besuch eines bestimmten Mobilgeräts.Each row of data describes a visit from a specific mobile device. Das Format des Eintrags sieht ähnlich wie der folgende Text aus:The record format appears like the following text:

     8       18:54:20        en-US   Android Samsung SCH-i500        California     United States    13.9204007      0       0
     23      19:19:44        en-US   Android HTC     Incredible      Pennsylvania   United States    NULL    0       0
     23      19:19:46        en-US   Android HTC     Incredible      Pennsylvania   United States    1.4757422       0       1
    

    Das in diesem Dokument verwendete Hive-Skript zählt die gesamten Besuche jeder Plattform (z.B. Android oder iPhone) und speichert die Werte in einer neuen Hive-Tabelle.The Hive script used in this document counts the total visits for each platform, such as Android or iPhone, and stores the counts to a new Hive table.

    Weitere Informationen zu Hive finden Sie unter Verwenden von Apache Hive mit HDInsight.For more information about Hive, see Use Apache Hive with HDInsight.

  2. Die Sqoop-Aktion exportiert den Inhalt der neuen Hive-Tabelle in eine Tabelle, die in Azure SQL-Datenbank erstellt wurde.A Sqoop action exports the contents of the new Hive table to a table created in Azure SQL Database. Weitere Informationen zu Sqoop finden Sie unter Verwenden von Sqoop mit Hadoop in HDInsight.For more information about Sqoop, see Use Apache Sqoop with HDInsight.

Hinweis

Informationen zu den unterstützten Oozie-Versionen in HDInsight-Clustern finden Sie unter Neuheiten in den von HDInsight bereitgestellten Hadoop-Clusterversionen.For supported Oozie versions on HDInsight clusters, see What's new in the Hadoop cluster versions provided by HDInsight.

Erstellen des ArbeitsverzeichnissesCreate the working directory

Oozie erwartet, dass die für einen Auftrag erforderlichen Ressourcen im selben Verzeichnis gespeichert werden.Oozie expects you to store all the resources required for a job in the same directory. In diesem Beispiel wird wasbs:///tutorials/useoozie verwendet.This example uses wasbs:///tutorials/useoozie. Erstellen Sie das Verzeichnis, und führen Sie die folgenden Schritte aus:To create this directory, complete the following steps:

  1. Bearbeiten Sie den Code unten so, dass sshuser durch den SSH-Benutzername für den Cluster ersetzt wird, und ersetzen Sie CLUSTERNAME durch den Namen des Clusters.Edit the code below to replace sshuser with the SSH user name for the cluster, and replace CLUSTERNAME with the name of the cluster. Geben Sie dann den Code ein, um mithilfe von SSH eine Verbindung mit dem HDInsight-Cluster herzustellen.Then enter the code to connect to the HDInsight cluster by using SSH.

    ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
    
  2. Verwenden Sie zum Erstellen des Verzeichnisses den folgenden Befehl:To create the directory, use the following command:

    hdfs dfs -mkdir -p /tutorials/useoozie/data
    

    Hinweis

    Der Parameter -p bewirkt, dass alle Verzeichnisse im Pfad erstellt werden.The -p parameter causes the creation of all directories in the path. Das Verzeichnis data dient zum Speichern der Daten, die vom Skript useooziewf.hql verwendet werden.The data directory is used to hold the data used by the useooziewf.hql script.

  3. Bearbeiten Sie den Code unten so, dass sshuser durch Ihren SSH-Benutzername ersetzt wird.Edit the code below to replace sshuser with your SSH user name. Führen Sie den folgenden Befehl aus, damit Oozie die Identität Ihres Benutzerkontos annehmen kann:To make sure that Oozie can impersonate your user account, use the following command:

    sudo adduser sshuser users
    

    Hinweis

    Sie können Fehler ignorieren, die besagen, dass der Benutzer bereits Mitglied der Gruppe users ist.You can ignore errors that indicate the user is already a member of the users group.

Hinzufügen eines DatenbanktreibersAdd a database driver

Da dieser Workflow Sqoop zum Exportieren von Daten in die SQL-Datenbank verwendet, müssen Sie eine Kopie des JDBC-Treibers bereitstellen, der für die Interaktion mit der SQL-Datenbank genutzt wird.Because this workflow uses Sqoop to export data to the SQL database, you must provide a copy of the JDBC driver used to interact with the SQL database. Führen Sie den folgenden Befehl in der SSH-Sitzung aus, um den JDBC-Treiber in das Arbeitsverzeichnis zu kopieren:To copy the JDBC driver to the working directory, use the following command from the SSH session:

hdfs dfs -put /usr/share/java/sqljdbc_7.0/enu/mssql-jdbc*.jar /tutorials/useoozie/

Wichtig

Überprüfen Sie den tatsächlichen JDBC-Treiber, der unter dem Pfad /usr/share/java/ verfügbar ist.Verify the actual JDBC driver that exists at /usr/share/java/.

Wenn Ihr Workflow andere Ressourcen wie z.B. eine JAR-Datei mit einer MapReduce-Anwendung verwendet hat, müssen Sie diese Ressourcen ebenfalls hinzufügen.If your workflow used other resources, such as a jar that contains a MapReduce application, you need to add those resources as well.

Definieren der Hive-AbfrageDefine the Hive query

Verwenden Sie die folgenden Schritte, um ein Skript der Hive-Abfragesprache (HiveQL) zu erstellen, das eine Abfrage definiert.Use the following steps to create a Hive query language (HiveQL) script that defines a query. Sie verwenden die Abfrage in einem Oozie-Workflow weiter unten in diesem Dokument.You'll use the query in an Oozie workflow later in this document.

  1. Führen Sie über die SSH-Verbindung den folgenden Befehl aus, um eine Datei mit dem Namen useooziewf.hql zu erstellen:From the SSH connection, use the following command to create a file named useooziewf.hql:

    nano useooziewf.hql
    
  2. Nachdem der GNU-Nano-Editor geöffnet wurde, verwenden Sie die folgende Abfrage als Inhalt der Datei:After the GNU nano editor opens, use the following query as the contents of the file:

    DROP TABLE ${hiveTableName};
    CREATE EXTERNAL TABLE ${hiveTableName}(deviceplatform string, count string) ROW FORMAT DELIMITED
    FIELDS TERMINATED BY '\t' STORED AS TEXTFILE LOCATION '${hiveDataFolder}';
    INSERT OVERWRITE TABLE ${hiveTableName} SELECT deviceplatform, COUNT(*) as count FROM hivesampletable GROUP BY deviceplatform;
    

    Im Skript werden zwei Variablen verwendet:There are two variables used in the script:

    • ${hiveTableName}: Enthält den Namen der zu erstellenden Tabelle.${hiveTableName}: Contains the name of the table to be created.

    • ${hiveDataFolder}: Enthält den Speicherort der Datendateien für die Tabelle.${hiveDataFolder}: Contains the location to store the data files for the table.

      Die Workflowdefinitionsdatei („workflow.xml“ in diesem Artikel) übergibt diese Werte zur Laufzeit an das HiveQL-Skript.The workflow definition file, workflow.xml in this article, passes these values to this HiveQL script at runtime.

  3. Um die Datei zu speichern, drücken Sie STRG+X, geben Sie J ein, und drücken Sie auf die EINGABETASTE.To save the file, select Ctrl+X, enter Y, and then select Enter.

  4. Führen Sie den folgenden Befehl aus, um useooziewf.hql nach wasbs:///tutorials/useoozie/useooziewf.hql zu kopieren:Use the following command to copy useooziewf.hql to wasbs:///tutorials/useoozie/useooziewf.hql:

    hdfs dfs -put useooziewf.hql /tutorials/useoozie/useooziewf.hql
    

    Mit diesem Befehl wird die Datei useooziewf.hql in dem mit Hadoop Distributed File System kompatiblen Speicher für den Cluster gespeichert.This command stores the useooziewf.hql file in the HDFS-compatible storage for the cluster.

Definieren des WorkflowsDefine the workflow

Oozie-Workflowdefinitionen sind in der Sprache der Hadoop-Prozessdefinition (hPDL) geschrieben. Dabei handelt es sich um eine Sprache der XML-Prozessdefinition.Oozie workflow definitions are written in Hadoop Process Definition Language (hPDL), which is an XML process definition language. Führen Sie zum Definieren des Workflows die folgenden Schritte aus:Use the following steps to define the workflow:

  1. Verwenden Sie die folgende Anweisung zum Erstellen und Bearbeiten einer neuen Datei:Use the following statement to create and edit a new file:

    nano workflow.xml
    
  2. Nachdem der Nano-Editor geöffnet wurde, verwenden Sie den folgenden XML-Code als Inhalt der Datei:After the nano editor opens, enter the following XML as the file contents:

    <workflow-app name="useooziewf" xmlns="uri:oozie:workflow:0.2">
        <start to = "RunHiveScript"/>
        <action name="RunHiveScript">
        <hive xmlns="uri:oozie:hive-action:0.2">
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <configuration>
            <property>
                <name>mapred.job.queue.name</name>
                <value>${queueName}</value>
            </property>
            </configuration>
            <script>${hiveScript}</script>
            <param>hiveTableName=${hiveTableName}</param>
            <param>hiveDataFolder=${hiveDataFolder}</param>
        </hive>
        <ok to="RunSqoopExport"/>
        <error to="fail"/>
        </action>
        <action name="RunSqoopExport">
        <sqoop xmlns="uri:oozie:sqoop-action:0.2">
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <configuration>
            <property>
                <name>mapred.compress.map.output</name>
                <value>true</value>
            </property>
            </configuration>
            <arg>export</arg>
            <arg>--connect</arg>
            <arg>${sqlDatabaseConnectionString}</arg>
            <arg>--table</arg>
            <arg>${sqlDatabaseTableName}</arg>
            <arg>--export-dir</arg>
            <arg>${hiveDataFolder}</arg>
            <arg>-m</arg>
            <arg>1</arg>
            <arg>--input-fields-terminated-by</arg>
            <arg>"\t"</arg>
            <archive>mssql-jdbc-7.0.0.jre8.jar</archive>
            </sqoop>
        <ok to="end"/>
        <error to="fail"/>
        </action>
        <kill name="fail">
        <message>Job failed, error message[${wf:errorMessage(wf:lastErrorNode())}] </message>
        </kill>
        <end name="end"/>
    </workflow-app>
    

    Im Workflow sind zwei Aktionen definiert:There are two actions defined in the workflow:

    • RunHiveScript: Diese Aktion ist die Startaktion und führt das Hive-Skript useooziewf.hql aus.RunHiveScript: This action is the start action and runs the useooziewf.hql Hive script.

    • RunSqoopExport: Diese Aktion exportiert die vom Hive-Skript erstellten Daten mithilfe von Sqoop in die SQL-Datenbank.RunSqoopExport: This action exports the data created from the Hive script to a SQL database by using Sqoop. Diese Aktion wird nur ausgeführt, wenn die Aktion RunHiveScript erfolgreich war.This action only runs if the RunHiveScript action is successful.

      Der Workflow weist mehrere Einträge auf, z.B. ${jobTracker}.The workflow has several entries, such as ${jobTracker}. Sie ersetzen diese Einträge durch die Werte, die Sie in der Auftragsdefinition verwenden.You'll replace these entries with the values you use in the job definition. Sie erstellen die Auftragsdefinition weiter unten in diesem Dokument.You'll create the job definition later in this document.

      Beachten Sie auch den Eintrag <archive>mssql-jdbc-7.0.0.jre8.jar</archive> im Abschnitt „Sqoop“.Also note the <archive>mssql-jdbc-7.0.0.jre8.jar</archive> entry in the Sqoop section. Dieser Eintrag weist Oozie an, dieses Archiv für Sqoop zur Verfügung zu stellen, wenn diese Aktion ausgeführt wird.This entry instructs Oozie to make this archive available for Sqoop when this action runs.

  3. Um die Datei zu speichern, drücken Sie STRG+X, geben Sie J ein, und drücken Sie auf die EINGABETASTE.To save the file, select Ctrl+X, enter Y, and then select Enter.

  4. Kopieren Sie mit folgendem Befehl die Datei workflow.xml nach /tutorials/useoozie/workflow.xml:Use the following command to copy the workflow.xml file to /tutorials/useoozie/workflow.xml:

    hdfs dfs -put workflow.xml /tutorials/useoozie/workflow.xml
    

Erstellen einer TabelleCreate a table

Hinweis

Es gibt viele Möglichkeiten, zum Erstellen einer Tabelle eine Verbindung mit SQL Database herzustellen.There are many ways to connect to SQL Database to create a table. Die folgenden Schritte verwenden FreeTDS aus dem HDInsight-Cluster.The following steps use FreeTDS from the HDInsight cluster.

  1. Verwenden Sie den folgenden Befehl, um FreeTDS im HDInsight-Cluster zu installieren:Use the following command to install FreeTDS on the HDInsight cluster:

    sudo apt-get --assume-yes install freetds-dev freetds-bin
    
  2. Bearbeiten Sie den Code unten so, dass <serverName> durch Ihren Azure SQL-Servername ersetzt wird, und <sqlLogin> durch die Azure SQL-Serveranmeldung.Edit the code below to replace <serverName> with your Azure SQL server name, and <sqlLogin> with the Azure SQL server login. Geben Sie den Befehl ein, um eine Verbindung mit der vorausgesetzten SQL-Datenbank herzustellen.Enter the command to connect to the prerequisite SQL database. Geben Sie in der Eingabeaufforderung das Kennwort ein.Enter the password at the prompt.

    TDSVER=8.0 tsql -H <serverName>.database.windows.net -U <sqlLogin> -p 1433 -D oozietest
    

    Sie erhalten dann eine Ausgabe wie etwa den folgenden Text:You receive output like the following text:

     locale is "en_US.UTF-8"
     locale charset is "UTF-8"
     using default charset "UTF-8"
     Default database being set to oozietest
     1>
    
  3. Geben Sie bei der Eingabeaufforderung 1> folgende Zeilen ein:At the 1> prompt, enter the following lines:

    CREATE TABLE [dbo].[mobiledata](
    [deviceplatform] [nvarchar](50),
    [count] [bigint])
    GO
    CREATE CLUSTERED INDEX mobiledata_clustered_index on mobiledata(deviceplatform)
    GO
    

    Nach Eingabe der Anweisung GO werden die vorherigen Anweisungen ausgewertet.When the GO statement is entered, the previous statements are evaluated. Mithilfe dieser Anweisungen wird eine Tabelle mit dem Namen mobiledata erstellt, die vom Workflow verwendet wird.These statements create a table, named mobiledata, that's used by the workflow.

    Um sicherzustellen, dass die Tabelle erstellt wurde, verwenden Sie die folgenden Befehle:To verify that the table has been created, use the following commands:

    SELECT * FROM information_schema.tables
    GO
    

    Ihnen sollte eine Ausgabe wie der folgende Text angezeigt werden:You see output like the following text:

     TABLE_CATALOG   TABLE_SCHEMA    TABLE_NAME      TABLE_TYPE
     oozietest       dbo             mobiledata      BASE TABLE
    
  4. Geben Sie zum Beenden des Dienstprogramms „tsql“ in die Eingabeaufforderung 1> den Befehl exit ein.Exit the tsql utility by entering exit at the 1> prompt.

Erstellen der AuftragsdefinitionCreate the job definition

Die Auftragsdefinition beschreibt, wo sich die workflow.xml-Datei befindet.The job definition describes where to find the workflow.xml. Sie beschreibt außerdem, wo sich andere vom Workflow verwendete Dateien (wie etwa useooziewf.hql) befinden.It also describes where to find other files used by the workflow, such as useooziewf.hql. Sie definiert auch die Werte für Eigenschaften, die innerhalb des Workflows verwendet werden, und die zugeordneten Dateien.In addition, it defines the values for properties used within the workflow and the associated files.

  1. Geben Sie den folgenden Befehl ein, um die vollständige Adresse des Standardspeichers abzurufen.To get the full address of the default storage, use the following command. Diese Adresse wird in der Konfigurationsdatei verwendet, die Sie im nächsten Schritt erstellen.This address is used in the configuration file you create in the next step.

    sed -n '/<name>fs.default/,/<\/value>/p' /etc/hadoop/conf/core-site.xml
    

    Die in der Rückgabe dieses Befehls enthaltenen Informationen sind ähnlich dem folgenden XML-Code:This command returns information like the following XML:

    <name>fs.defaultFS</name>
    <value>wasbs://mycontainer@mystorageaccount.blob.core.windows.net</value>
    

    Hinweis

    Falls der HDInsight-Cluster Azure Storage als Standardspeicher verwendet, beginnt der Inhalt des Elements <value> mit wasbs://.If the HDInsight cluster uses Azure Storage as the default storage, the <value> element contents begin with wasbs://. Wenn stattdessen Azure Data Lake Storage Gen1 verwendet wird, beginnt er mit adl://.If Azure Data Lake Storage Gen1 is used instead, it begins with adl://. Wenn Azure Data Lake Storage Gen2 verwendet wird, beginnt er mit abfs://.If Azure Data Lake Storage Gen2 is used, it begins with abfs://.

    Speichern Sie den Inhalt des Elements <value>. Dieser wird im nächsten Schritt verwendet.Save the contents of the <value> element, as it's used in the next steps.

  2. Bearbeiten Sie das xml-Dokument unten folgendermaßen:Edit the xml below as follows:

    PlatzhalterwertPlaceholder value Ersetzter WertReplaced value
    wasbs://mycontainer@mystorageaccount.blob.core.windows.netwasbs://mycontainer@mystorageaccount.blob.core.windows.net Wert aus Schritt 1Value received from step 1.
    adminadmin Ihr Anmeldename für den HDInsight-Cluster, falls Sie kein Administrator sind.Your login name for the HDInsight cluster if not admin.
    serverNameserverName Name des Azure SQL-Datenbank-ServersAzure SQL database server name.
    sqlLoginsqlLogin Anmeldung des Azure SQL-Datenbank-ServersAzure SQL database server login.
    sqlPasswordsqlPassword Anmeldekennwort des Azure SQL-Datenbank-ServersAzure SQL database server login password.
    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
    
        <property>
        <name>nameNode</name>
        <value>wasbs://mycontainer@mystorageaccount.blob.core.windows.net</value>
        </property>
    
        <property>
        <name>jobTracker</name>
        <value>headnodehost:8050</value>
        </property>
    
        <property>
        <name>queueName</name>
        <value>default</value>
        </property>
    
        <property>
        <name>oozie.use.system.libpath</name>
        <value>true</value>
        </property>
    
        <property>
        <name>hiveScript</name>
        <value>wasbs://mycontainer@mystorageaccount.blob.core.windows.net/tutorials/useoozie/useooziewf.hql</value>
        </property>
    
        <property>
        <name>hiveTableName</name>
        <value>mobilecount</value>
        </property>
    
        <property>
        <name>hiveDataFolder</name>
        <value>wasbs://mycontainer@mystorageaccount.blob.core.windows.net/tutorials/useoozie/data</value>
        </property>
    
        <property>
        <name>sqlDatabaseConnectionString</name>
        <value>"jdbc:sqlserver://serverName.database.windows.net;user=sqlLogin;password=sqlPassword;database=oozietest"</value>
        </property>
    
        <property>
        <name>sqlDatabaseTableName</name>
        <value>mobiledata</value>
        </property>
    
        <property>
        <name>user.name</name>
        <value>admin</value>
        </property>
    
        <property>
        <name>oozie.wf.application.path</name>
        <value>wasbs://mycontainer@mystorageaccount.blob.core.windows.net/tutorials/useoozie</value>
        </property>
    </configuration>
    

    Die meisten der Informationen in dieser Datei dienen zum Auffüllen der Werte, die in der Datei „workflow.xml“ oder „ooziewf.hql“ (z.B. ${nameNode}) verwendet werden.Most of the information in this file is used to populate the values used in the workflow.xml or ooziewf.hql files, such as ${nameNode}. Wenn der Pfad ein Pfad des Typs wasbs ist, müssen Sie den vollständigen Pfad verwenden.If the path is a wasbs path, you must use the full path. Verkürzen Sie ihn nicht bloß auf wasbs:///.Don't shorten it to just wasbs:///. Der Eintrag oozie.wf.application.path definiert, wo die Datei „workflow.xml“ zu finden ist.The oozie.wf.application.path entry defines where to find the workflow.xml file. Diese Datei enthält den Workflow, der von diesem Auftrag ausgeführt wurde.This file contains the workflow that was run by this job.

  3. Verwenden Sie zum Erstellen der Konfiguration der Oozie-Auftragsdefinition den folgenden Befehl:To create the Oozie job definition configuration, use the following command:

    nano job.xml
    
  4. Nachdem der Nano-Editor geöffnet wurde, fügen Sie den bearbeiteten XML-Code als Inhalt der Datei ein.After the nano editor opens, paste the edited XML as the contents of the file.

  5. Um die Datei zu speichern, drücken Sie STRG+X, geben Sie J ein, und drücken Sie auf die EINGABETASTE.To save the file, select Ctrl+X, enter Y, and then select Enter.

Übermitteln und Verwalten des AuftragsSubmit and manage the job

Die folgenden Schritte verwenden den Oozie-Befehl zum Übermitteln und Verwalten von Oozie-Workflows im Cluster.The following steps use the Oozie command to submit and manage Oozie workflows on the cluster. Der Oozie-Befehl ist eine benutzerfreundliche Schnittstelle, die über die Oozie-REST-APIzur Verfügung steht.The Oozie command is a friendly interface over the Oozie REST API.

Wichtig

Wenn Sie den Oozie-Befehl verwenden, müssen Sie den vollqualifizierten Domänennamen (FQDN) des HDInsight-Hauptknotens verwenden.When you use the Oozie command, you must use the FQDN for the HDInsight head node. Auf diesen FQDN kann nur innerhalb des Clusters zugegriffen werden. Wenn der Cluster sich in einem virtuellen Azure-Netzwerk befindet, ist der Zugriff von anderen Computern im selben Netzwerk möglich.This FQDN is only accessible from the cluster, or if the cluster is on an Azure virtual network, from other machines on the same network.

  1. Geben Sie zum Abrufen der URL des Oozie-Diensts den folgenden Befehl an:To obtain the URL to the Oozie service, use the following command:

    sed -n '/<name>oozie.base.url/,/<\/value>/p' /etc/oozie/conf/oozie-site.xml
    

    Die zurückgegebenen Informationen ähneln dem folgenden XML-Code:This returns information like the following XML:

    <name>oozie.base.url</name>
    <value>http://ACTIVE-HEADNODE-NAME.UNIQUEID.cx.internal.cloudapp.net:11000/oozie</value>
    

    Der Teil http://ACTIVE-HEADNODE-NAME.UNIQUEID.cx.internal.cloudapp.net:11000/oozie ist die mit dem Oozie-Befehl zu verwendende URL.The http://ACTIVE-HEADNODE-NAME.UNIQUEID.cx.internal.cloudapp.net:11000/oozie portion is the URL to use with the Oozie command.

  2. Bearbeiten Sie den Code so, dass die URL durch diejenige ersetzt wird, die Sie zuvor erhalten haben.Edit the code to replace the URL with the one you received earlier. Geben Sie Folgendes an, um eine Umgebungsvariable für die URL erstellen, damit Sie sie nicht für jeden Befehl eingeben müssen:To create an environment variable for the URL, use the following, so you don't have to enter it for every command:

    export OOZIE_URL=http://HOSTNAMEt:11000/oozie
    
  3. Geben Sie Folgendes an, um den Auftrag zu übermitteln:To submit the job, use the following:

    oozie job -config job.xml -submit
    

    Mit diesem Befehl werden die Auftragsinformationen aus der Datei job.xml geladen und an Oozie übermittelt, ohne dass die Datei ausgeführt wird.This command loads the job information from job.xml and submits it to Oozie, but doesn't run it.

    Nach Abschluss des Befehls sollte die ID des Auftrags zurückgegeben werden, z.B. 0000005-150622124850154-oozie-oozi-W.After the command finishes, it should return the ID of the job, for example, 0000005-150622124850154-oozie-oozi-W. Diese ID wird verwendet, um den Auftrag zu verwalten.This ID is used to manage the job.

  4. Bearbeiten Sie den Code unten so, dass <JOBID> durch die ID ersetzt wird, die im vorherigen Schritt zurückgegeben wurde.Edit the code below to replace <JOBID> with the ID returned in the previous step. Verwenden Sie den folgenden Befehl, um den Status des Auftrags zu prüfen:To view the status of the job, use the following command:

    oozie job -info <JOBID>
    

    Die Ausgabe sieht in etwa wie der folgende Text aus:This returns information like the following text:

     Job ID : 0000005-150622124850154-oozie-oozi-W
     ------------------------------------------------------------------------------------------------------------------------------------
     Workflow Name : useooziewf
     App Path      : wasb:///tutorials/useoozie
     Status        : PREP
     Run           : 0
     User          : USERNAME
     Group         : -
     Created       : 2015-06-22 15:06 GMT
     Started       : -
     Last Modified : 2015-06-22 15:06 GMT
     Ended         : -
     CoordAction ID: -
     ------------------------------------------------------------------------------------------------------------------------------------
    

    Dieser Auftrag hat den Status PREP.This job has a status of PREP. Dieser Status gibt an, dass der Auftrag erstellt, aber nicht gestartet wurde.This status indicates that the job was created, but not started.

  5. Bearbeiten Sie den Code unten so, dass <JOBID> durch die ID ersetzt wird, die zuvor zurückgegeben wurde.Edit the code below to replace <JOBID> with the ID returned previously. Verwenden Sie den folgenden Befehl zum Starten des Auftrags:To start the job, use the following command:

    oozie job -start <JOBID>
    

    Wenn Sie nach diesem Befehl den Status überprüfen, lautet dieser „Wird ausgeführt“, und Informationen für die Aktionen innerhalb des Auftrags werden zurückgegeben.If you check the status after this command, it's in a running state, and information is returned for the actions within the job. Die Ausführung des Auftrags nimmt einige Minuten in Anspruch.The job will take a few minutes to complete.

  6. Bearbeiten Sie den Code unten so, dass <serverName> durch Ihren Azure SQL-Servername ersetzt wird, und <sqlLogin> durch die Azure SQL-Serveranmeldung.Edit the code below to replace <serverName> with your Azure SQL server name, and <sqlLogin> with the Azure SQL server login. Sobald die Aufgabe erfolgreich abgeschlossen wurde, können Sie mit dem folgenden Befehl überprüfen, ob die Daten generiert wurden und ob die SQL-Datenbanktabelle exportiert wurde.After the task finishes successfully, you can verify that the data was generated and exported to the SQL database table by using the following command. Geben Sie in der Eingabeaufforderung das Kennwort ein.Enter the password at the prompt.

    TDSVER=8.0 tsql -H <serverName>.database.windows.net -U <sqlLogin> -p 1433 -D oozietest
    

    Geben Sie bei der Eingabeaufforderung 1> folgende Abfrage ein:At the 1> prompt, enter the following query:

    SELECT * FROM mobiledata
    GO
    

    Die zurückgegebenen Informationen ähneln dem folgenden Text:The information returned is like the following text:

     deviceplatform  count
     Android 31591
     iPhone OS       22731
     proprietary development 3
     RIM OS  3464
     Unknown 213
     Windows Phone   1791
     (6 rows affected)
    

Weitere Informationen zum Oozie-Befehl finden Sie unter Apache Oozie-Befehlszeilentool.For more information on the Oozie command, see Apache Oozie command-line tool.

Oozie-REST-APIOozie REST API

Mit der Oozie-REST-API können Sie eigene Tools erstellen, die mit Oozie arbeiten.With the Oozie REST API, you can build your own tools that work with Oozie. Die folgenden Informationen zur Verwendung der Oozie-REST-API sind HDInsight-spezifisch:The following is HDInsight-specific information about the use of the Oozie REST API:

  • URI: Unter https://CLUSTERNAME.azurehdinsight.net/oozie können Sie von außerhalb des Clusters auf die REST-API zugreifen.URI: You can access the REST API from outside the cluster at https://CLUSTERNAME.azurehdinsight.net/oozie.

  • Authentifizierung: Verwenden Sie die API mit dem HTTP-Clusteradministratorkonto und -kennwort, um sich zu authentifizieren.Authentication: To authenticate, use the API the cluster HTTP account (admin) and password. Beispiel:For example:

    curl -u admin:PASSWORD https://CLUSTERNAME.azurehdinsight.net/oozie/versions
    

Weitere Informationen zur Verwendung der Oozie-REST-API finden Sie unter Apache Oozie-Webdienste-API.For more information on how to use the Oozie REST API, see Apache Oozie Web Services API.

Oozie-WebbenutzeroberflächeOozie web UI

Die Oozie-Webbenutzeroberfläche bietet eine webbasierte Anzeige des Status von Oozie-Aufträgen im Cluster.The Oozie web UI provides a web-based view into the status of Oozie jobs on the cluster. In der Web-UI können Sie die folgenden Informationen anzeigen:With the web UI you can view the following information:

  • AuftragsstatusJob status
  • AuftragsdefinitionJob definition
  • KonfigurationConfiguration
  • Ein Diagramm der im Auftrag enthaltenen AktionenA graph of the actions in the job
  • Protokolle für den AuftragLogs for the job

Sie können auch die Informationen zu den Aktionen innerhalb eines Auftrags anzeigen.You can also view the details for the actions within a job.

Um auf die Oozie-Webbenutzeroberfläche zuzugreifen, gehen Sie folgendermaßen vor:To access the Oozie web UI, complete the following steps:

  1. Erstellen Sie einen SSH-Tunnel zum HDInsight-Cluster.Create an SSH tunnel to the HDInsight cluster. Weitere Informationen finden Sie unter Verwenden von SSH-Tunneling mit HDInsight.For more information, see Use SSH Tunneling with HDInsight.

  2. Nachdem Sie einen Tunnel erstellt haben, öffnen Sie mithilfe des URI http://headnodehost:8080 die Ambari-Webbenutzeroberfläche in Ihrem Webbrowser.After you create a tunnel, open the Ambari web UI in your web browser using URI http://headnodehost:8080.

  3. Klicken Sie auf der linken Seite der Seite auf Oozie > QuickLinks > Oozie Web UI.From the left side of the page, select Oozie > Quick Links > Oozie Web UI.

    Apache Ambari – Schritte in der Oozie-Webbenutzeroberfläche

  4. Die Oozie-Webbenutzeroberfläche zeigt standardmäßig aktive Workflowaufträge an.The Oozie web UI defaults to display the running workflow jobs. Klicken Sie zum Anzeigen aller Workflowaufträge auf Alle Aufträge.To see all the workflow jobs, select All Jobs.

    Workflowaufträge in der Oozie-Webkonsole

  5. Um weitere Informationen über einen Auftrag anzuzeigen, klicken Sie auf den Auftrag.To view more information about a job, select the job.

    HDInsight – Apache Oozie-Auftragsinformationen

  6. Auf der Registerkarte Auftragsinformationen können Sie die grundlegenden Auftragsinformationen und die einzelnen Aktionen innerhalb des Auftrags anzeigen.From the Job Info tab, you can see the basic job information and the individual actions within the job. Auf den Registerkarten am oberen Rand können Sie die Auftragsdefinition und Auftragskonfiguration anzeigen, auf das Auftragsprotokoll zugreifen oder einen gerichteten azyklischen Graph (Directed Acyclic Graph, DAG) unter DAG des Auftrags anzeigen.You can use the tabs at the top to view the Job Definition, Job Configuration, access the Job Log, or view a directed acyclic graph (DAG) of the job under Job DAG.

    • Auftragsprotokoll: Wählen Sie die Schaltfläche Get Logs (Protokolle abrufen) aus, um alle Protokolle für den Auftrag abzurufen, oder filtern Sie die Protokolle mithilfe des Felds Suchfilter eingeben.Job Log: Select the Get Logs button to get all logs for the job, or use the Enter Search Filter field to filter the logs.

      HDInsight – Apache Oozie-Auftragsprotokoll

    • Auftrags-DAG: Der DAG ist eine grafische Übersicht über die Datenpfade, die im Workflow gewählt wurden.Job DAG: The DAG is a graphical overview of the data paths taken through the workflow.

      HDInsight – Apache Oozie-Auftrags-DAG

  7. Wenn Sie eine der Aktionen auf der Registerkarte Auftragsinformationen auswählen, werden Informationen zur Aktion eingeblendet.If you select one of the actions from the Job Info tab, it brings up information for the action. Wählen Sie z.B. die Aktion RunSqoopExport aus.For example, select the RunSqoopExport action.

    HDInsight-Oozie-Auftrag – Aktionsinfo

  8. Sie können Details für die Aktion anzeigen, z. B. einen Link zur Konsolen-URL.You can see details for the action, such as a link to the Console URL. Verwenden Sie diesen Link zum Anzeigen von JobTracker-Informationen für den Auftrag.Use this link to view job tracker information for the job.

Planen von AufträgenSchedule jobs

Sie können den Koordinator verwenden, um den Start, das Ende und die Häufigkeit von Aufträgen anzugeben.You can use the coordinator to specify a start, an end, and the occurrence frequency for jobs. Um einen Zeitplan für den Workflow zu definieren, führen Sie die folgenden Schritte aus:To define a schedule for the workflow, complete the following steps:

  1. Verwenden Sie den folgenden Befehl, um eine Datei namens coordinator.xml zu erstellen:Use the following command to create a file named coordinator.xml:

    nano coordinator.xml
    

    Verwenden Sie den folgenden XML-Code als Inhalt der Datei:Use the following XML as the contents of the file:

    <coordinator-app name="my_coord_app" frequency="${coordFrequency}" start="${coordStart}" end="${coordEnd}" timezone="${coordTimezone}" xmlns="uri:oozie:coordinator:0.4">
        <action>
        <workflow>
            <app-path>${workflowPath}</app-path>
        </workflow>
        </action>
    </coordinator-app>
    

    Hinweis

    Die ${...}-Variablen werden zur Laufzeit durch Werte in der Auftragsdefinition ersetzt.The ${...} variables are replaced by values in the job definition at runtime. Die Variablen heißen wie folgt:The variables are:

    • ${coordFrequency}: Die Zeit zwischen der Ausführung von Instanzen des Auftrags.${coordFrequency}: The time between running instances of the job.
    • ${coordStart}: Die Startzeit des Auftrags.${coordStart}: The job start time.
    • ${coordEnd}: Die Endzeit des Auftrags.${coordEnd}: The job end time.
    • ${coordTimezone}: Für Koordinatoraufträge wird eine feste Zeitzone ohne Sommerzeit verwendet (in der Regel in UTC).${coordTimezone}: Coordinator jobs are in a fixed time zone with no daylight savings time, typically represented by using UTC. Diese Zeitzone wird als Oozie-Verarbeitungszeitzone bezeichnet.This time zone is referred as the Oozie processing timezone.
    • ${wfPath}: Der Pfad der Datei „workflow.xml“.${wfPath}: The path to the workflow.xml.
  2. Um die Datei zu speichern, drücken Sie STRG+X, geben Sie J ein, und drücken Sie auf die EINGABETASTE.To save the file, select Ctrl+X, enter Y, and then select Enter.

  3. Verwenden Sie den folgenden Befehl, um die Datei in das Arbeitsverzeichnis dieses Auftrags zu kopieren:To copy the file to the working directory for this job, use the following command:

    hadoop fs -put coordinator.xml /tutorials/useoozie/coordinator.xml
    
  4. Verwenden Sie zum Bearbeiten der zuvor erstellten job.xml-Datei den folgenden Befehl:To modify the job.xml file you created earlier, use the following command:

    nano job.xml
    

    Nehmen Sie die folgenden Änderungen vor:Make the following changes:

    • Um Oozie anzuweisen, die Koordinatordatei statt des Workflows auszuführen, ändern Sie <name>oozie.wf.application.path</name> in <name>oozie.coord.application.path</name>.To instruct Oozie to run the coordinator file instead of the workflow, change <name>oozie.wf.application.path</name> to <name>oozie.coord.application.path</name>.

    • Fügen Sie zum Festlegen der Variablen workflowPath, die vom Koordinator verwendet wird, den folgenden XML-Code hinzu:To set the workflowPath variable used by the coordinator, add the following XML:

      <property>
          <name>workflowPath</name>
          <value>wasbs://mycontainer@mystorageaccount.blob.core.windows.net/tutorials/useoozie</value>
      </property>
      

      Ersetzen Sie den Text wasbs://mycontainer@mystorageaccount.blob.core.windows durch den Wert, der in weiteren Einträgen in der Datei „job.xml“ verwendet wird.Replace the wasbs://mycontainer@mystorageaccount.blob.core.windows text with the value used in the other entries in the job.xml file.

    • Fügen Sie den folgenden XML-Code hinzu, um Start, Ende und Häufigkeit für den Koordinator festzulegen:To define the start, end, and frequency for the coordinator, add the following XML:

      <property>
          <name>coordStart</name>
          <value>2018-05-10T12:00Z</value>
      </property>
      
      <property>
          <name>coordEnd</name>
          <value>2018-05-12T12:00Z</value>
      </property>
      
      <property>
          <name>coordFrequency</name>
          <value>1440</value>
      </property>
      
      <property>
          <name>coordTimezone</name>
          <value>UTC</value>
      </property>
      

      Diese Werte legen die Startzeit auf 12:00 Uhr am 10. Mai 2018 und die Endzeit auf den 12. Mai 2018 fest.These values set the start time to 12:00 PM on May 10, 2018, and the end time to May 12, 2018. Das Intervall für die Auftragsausführung ist auf „täglich“ festgelegt.The interval for running this job is set to daily. Die Häufigkeit wird in Minuten angegeben. Daher gilt 24 Stunden x 60 Minuten = 1.440 Minuten.The frequency is in minutes, so 24 hours x 60 minutes = 1440 minutes. Schließlich wird die Zeitzone auf UTC festgelegt.Finally, the time zone is set to UTC.

  5. Um die Datei zu speichern, drücken Sie STRG+X, geben Sie J ein, und drücken Sie auf die EINGABETASTE.To save the file, select Ctrl+X, enter Y, and then select Enter.

  6. Verwenden Sie den folgenden Befehl zum Übermitteln und Starten des Auftrags:To submit and start the job, use the following command:

    oozie job -config job.xml -run
    
  7. Wenn Sie zur Oozie-Webbenutzeroberfläche wechseln und die Registerkarte Koordinatoraufträge auswählen, werden Informationen ähnlich wie in der folgenden Abbildung angezeigt:If you go to the Oozie web UI and select the Coordinator Jobs tab, you see information like in the following image:

    Registerkarte für Koordinatoraufträge in der Oozie-Webkonsole

    Der Eintrag Next Materialization (Nächste Materialisierung) enthält die nächste Ausführungszeit des Auftrags.The Next Materialization entry contains the next time that the job runs.

  8. Wie beim vorherigen Workflowauftrag werden beim Auswählen des Auftragseintrags auf der Webbenutzeroberfläche Informationen zum Auftrag angezeigt:Like the earlier workflow job, if you select the job entry in the web UI it displays information on the job:

    Apache Oozie-Koordinator – Auftragsinformationen

    Hinweis

    In dieser Abbildung werden nur erfolgreiche Ausführungen des Auftrags und nicht einzelne Aktionen innerhalb des geplanten Workflows angezeigt.This image only shows successful runs of the job, not the individual actions within the scheduled workflow. Um die einzelnen Aktionen anzuzeigen, wählen Sie eine der Aktionseinträge aus.To see the individual actions, select one of the Action entries.

    Oozie-Webkonsole – Registerkarte mit Auftragsinformationen

ProblembehandlungTroubleshooting

Mithilfe der Oozie-Benutzeroberfläche können Sie die Oozie-Protokolle anzeigen.With the Oozie UI, you can view Oozie logs. Die Oozie-Benutzeroberfläche enthält darüber hinaus Links zu den JobTracker-Protokollen für die MapReduce-Aufgaben, die vom Workflow gestartet werden.The Oozie UI also contains links to the JobTracker logs for the MapReduce tasks that were started by the workflow. Im Allgemeinen sollten Sie zur Problembehandlung wie folgt vorgehen:The pattern for troubleshooting should be:

  1. Zeigen Sie den Auftrag auf der Oozie-Webbenutzeroberfläche an.View the job in Oozie web UI.

  2. Wenn eine bestimmte Aktion nicht erfolgreich war, wählen Sie die Aktion aus, um festzustellen, ob das Feld Fehlermeldung weitere Informationen zum Fehler enthält.If there's an error or failure for a specific action, select the action to see if the Error Message field provides more information on the failure.

  3. Falls verfügbar, verwenden Sie die URL der Aktion, um weitere Details (z.B. JobTracker-Protokolle) für die Aktion anzuzeigen.If available, use the URL from the action to view more details, such as the JobTracker logs, for the action.

Im Folgenden sehen Sie Fehlermeldungen, die auftreten können, und Möglichkeiten zur Behebung.The following are specific errors you might encounter and how to resolve them.

JA009: Cluster kann nicht initialisiert werden.JA009: Cannot initialize cluster

Symptome: Der Auftragsstatus ändert sich in SUSPENDED.Symptoms: The job status changes to SUSPENDED. In den Auftragsdetails wird der Status von RunHiveScript als START_MANUAL angezeigt.Details for the job show the RunHiveScript status as START_MANUAL. Bei Auswahl der Aktion wird die folgende Fehlermeldung angezeigt:Selecting the action displays the following error message:

JA009: Cannot initialize Cluster. Please check your configuration for map

Ursache: Die in der Datei job.xml verwendeten Azure-Blobspeicheradressen enthalten nicht den Namen des Speichercontainers oder des Speicherkontos.Cause: The Azure Blob storage addresses used in the job.xml file doesn't contain the storage container or storage account name. Das Format der Blob-Speicheradresse muss wasbs://containername@storageaccountname.blob.core.windows.net sein.The Blob storage address format must be wasbs://containername@storageaccountname.blob.core.windows.net.

Lösung: Ändern Sie die Blobspeicheradressen für den Auftrag.Resolution: Change the Blob storage addresses that the job uses.

JA002: Oozie darf nicht die Identität von <USER> annehmen.JA002: Oozie is not allowed to impersonate <USER>

Symptome: Der Auftragsstatus ändert sich in SUSPENDED.Symptoms: The job status changes to SUSPENDED. In den Auftragsdetails wird der Status von RunHiveScript als START_MANUAL angezeigt.Details for the job show the RunHiveScript status as START_MANUAL. Wenn Sie die Aktion auswählen, wird die folgende Fehlermeldung angezeigt:If you select the action, it shows the following error message:

JA002: User: oozie is not allowed to impersonate <USER>

Ursache: Die aktuellen Berechtigungseinstellungen lassen nicht zu, dass Oozie die Identität des angegebenen Benutzerkontos annimmt.Cause: The current permission settings don't allow Oozie to impersonate the specified user account.

Lösung: Oozie kann die Identität von Benutzern in der Gruppe users annehmen.Resolution: Oozie can impersonate users in the users group. Verwenden Sie groups USERNAME , um die Gruppen anzuzeigen, denen das Benutzerkonto als Mitglied angehört.Use the groups USERNAME to see the groups that the user account is a member of. Wenn der Benutzer nicht Mitglied der Gruppe users ist, verwenden Sie den folgenden Befehl, um den Benutzer der Gruppe hinzuzufügen:If the user isn't a member of the users group, use the following command to add the user to the group:

sudo adduser USERNAME users

Hinweis

Es kann einige Minuten dauern, bis HDInsight erkennt, dass der Benutzer der Gruppe hinzugefügt wurde.It can take several minutes before HDInsight recognizes that the user has been added to the group.

Launcher ERROR (Sqoop)Launcher ERROR (Sqoop)

Symptome: Der Auftragsstatus ändert sich in KILLED.Symptoms: The job status changes to KILLED. In den Auftragsdetails wird der Status von RunSqoopExport als ERROR (Fehler) angezeigt.Details for the job show the RunSqoopExport status as ERROR. Wenn Sie die Aktion auswählen, wird die folgende Fehlermeldung angezeigt:If you select the action, it shows the following error message:

Launcher ERROR, reason: Main class [org.apache.oozie.action.hadoop.SqoopMain], exit code [1]

Ursache: Sqoop kann den Datenbanktreiber nicht laden, der für den Zugriff auf die Datenbank erforderlich ist.Cause: Sqoop is unable to load the database driver required to access the database.

Lösung: Bei Verwendung von Sqoop in einem Oozie-Auftrag müssen Sie den Datenbanktreiber zusammen mit den anderen vom Auftrag verwendeten Ressourcen (beispielsweise die Datei „workflow.xml“) angeben.Resolution: When you use Sqoop from an Oozie job, you must include the database driver with the other resources, such as the workflow.xml, the job uses. Verweisen Sie im Abschnitt <sqoop>...</sqoop> von „workflow.xml“ auf das Archiv mit dem Datenbanktreiber.Also, reference the archive that contains the database driver from the <sqoop>...</sqoop> section of the workflow.xml.

Für den Auftrag in diesem Dokument würden Sie z. B. folgendermaßen die folgenden Schritte ausführen:For example, for the job in this document, you would use the following steps:

  1. Kopieren Sie die Datei mssql-jdbc-7.0.0.jre8.jar in das Verzeichnis /tutorials/useoozie:Copy the mssql-jdbc-7.0.0.jre8.jar file to the /tutorials/useoozie directory:

    hdfs dfs -put /usr/share/java/sqljdbc_7.0/enu/mssql-jdbc-7.0.0.jre8.jar /tutorials/useoozie/mssql-jdbc-7.0.0.jre8.jar
    
  2. Ändern Sie die Datei workflow.xml, indem Sie den folgenden XML-Code einer neuen Zeile oberhalb von </sqoop> hinzufügen:Modify the workflow.xml to add the following XML on a new line above </sqoop>:

    <archive>mssql-jdbc-7.0.0.jre8.jar</archive>
    

Nächste SchritteNext steps

In diesem Artikel haben Sie gelernt, wie ein Oozie-Workflow definiert und Oozie-Auftrag ausgeführt wird.In this article, you learned how to define an Oozie workflow and how to run an Oozie job. Weitere Informationen zum Arbeiten mit HDInsight finden Sie in den folgenden Artikeln:To learn more about how to work with HDInsight, see the following articles: