Usare Oozie con Hadoop per definire ed eseguire un flusso di lavoro in Azure HDInsight basato su LinuxUse Oozie with Hadoop to define and run a workflow on Linux-based Azure HDInsight

Informazioni su come usare Apache Oozie con Hadoop in Azure HDInsight.Learn how to use Apache Oozie with Hadoop on Azure HDInsight. Oozie è un sistema di coordinamento dei flussi di lavoro che consente di gestire i processi Hadoop.Oozie is a workflow and coordination system that manages Hadoop jobs. Oozie è integrato con lo stack Hadoop e supporta i processi seguenti:Oozie is integrated with the Hadoop stack, and it supports the following jobs:

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

Oozie può anche essere usato per pianificare processi specifici di un sistema, come programmi Java o script della shell.You can also use Oozie to schedule jobs that are specific to a system, like Java programs or shell scripts.

Nota

Per definire i flussi di lavoro con HDInsight, è anche possibile usare Azure Data Factory.Another option to define workflows with HDInsight is to use Azure Data Factory. Per altre informazioni su Azure Data Factory, vedere Usare Pig e Hive con Data Factory.To learn more about Data Factory, see Use Pig and Hive with Data Factory.

Importante

Oozie non è abilitato su HDInsight appartenente al dominio.Oozie is not enabled on domain-joined HDInsight.

PrerequisitiPrerequisites

Importante

I passaggi descritti in questo documento richiedono un cluster HDInsight che usa Linux.The steps in this document require an HDInsight cluster that uses Linux. Linux è l'unico sistema operativo usato in HDInsight versione 3.4 o successiva.Linux is the only operating system used on HDInsight version 3.4 or later. Per altre informazioni, vedere la sezione relativa al ritiro di HDInsight in Windows.For more information, see HDInsight retirement on Windows.

Esempio di flusso di lavoroExample workflow

Il flusso di lavoro usato in questo documento prevede due azioni.The workflow used in this document contains two actions. Le azioni sono definizioni di attività, ad esempio l'esecuzione di processi Hive, Sqoop, MapReduce o altri:Actions are definitions for tasks, such as running Hive, Sqoop, MapReduce, or other processes:

Diagramma del flusso di lavoro

  1. Un'azione di Hive esegue uno script HiveQL per estrarre i record da hivesampletable, inclusa in HDInsight.A Hive action runs an HiveQL script to extract records from the hivesampletable that's included with HDInsight. Ogni riga di dati descrive una visita da un dispositivo mobile specifico.Each row of data describes a visit from a specific mobile device. Il formato del record risulterà simile al testo seguente: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
    

    Lo script Hive usato in questo documento conta le visite totali per ogni piattaforma (ad esempio Android o iPhone) e archivia i conteggi in una nuova tabella Hive.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.

    Per altre informazioni su Hive, vedere Usare Hive con HDInsight.For more information about Hive, see Use Hive with HDInsight.

  2. Un'azione di Sqoop esporta il contenuto della nuova tabella Hive in una tabella creata nel database SQL di Azure.A Sqoop action exports the contents of the new Hive table to a table created in Azure SQL Database. Per altre informazioni su Sqoop, vedere Usare Sqoop con Hadoop in HDInsight.For more information about Sqoop, see Use Hadoop Sqoop with HDInsight.

Nota

Per informazioni sulle versioni di Oozie supportate nei cluster HDInsight, vedere Novità delle versioni cluster di Hadoop incluse in HDInsight.For supported Oozie versions on HDInsight clusters, see What's new in the Hadoop cluster versions provided by HDInsight.

Creare la directory di lavoroCreate the working directory

Oozie presuppone che tutte le risorse necessarie per un processo siano archiviate nella stessa directory.Oozie expects you to store all the resources required for a job in the same directory. Questo esempio usa wasb:///tutorials/useoozie.This example uses wasb:///tutorials/useoozie. Per creare questa directory, completare la procedura seguente:To create this directory, complete the following steps:

  1. Connettersi al cluster HDInsight usando SSH:Connect to the HDInsight cluster by using SSH:

    ssh sshuser@clustername-ssh.azurehdinsight.net
    

    Sostituire sshuser con il nome utente SSH per il cluster.Replace sshuser with the SSH user name for the cluster. Sostituire clustername con il nome del cluster.Replace clustername with the name of the cluster. Per altre informazioni, vedere Usare SSH con HDInsight.For more information, see Use SSH with HDInsight.

  2. Per creare la directory, usare il comando seguente:To create the directory, use the following command:

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

    Nota

    Il parametro -p crea tutte le directory nel percorso.The -p parameter causes the creation of all directories in the path. La directory data viene usata per contenere i dati usati dallo script useooziewf.hql.The data directory is used to hold the data used by the useooziewf.hql script.

  3. Per assicurarsi che Oozie possa rappresentare l'account utente, usare il comando seguente:To make sure that Oozie can impersonate your user account, use the following command:

    sudo adduser username users
    

    Sostituire username con il nome utente SSH personale.Replace username with your SSH user name.

    Nota

    È possibile ignorare gli errori che indicano che l'utente è già un membro del gruppo users.You can ignore errors that indicate the user is already a member of the users group.

Aggiungere un driver di databaseAdd a database driver

Poiché questo flusso di lavoro usa Sqoop per esportare dati nel database SQL, è necessario che sia disponibile una copia del driver JDBC usato per interagire con il database SQL.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. Per copiare il driver JDBC nella directory di lavoro, usare il comando seguente della sessione SSH:To copy the JDBC driver to the working directory, use the following command from the SSH session:

hdfs dfs -put /usr/share/java/sqljdbc_4.1/enu/sqljdbc*.jar /tutorials/useoozie/

Se il flusso di lavoro ha usato altre risorse, ad esempio un file con estensione jar contenente un'applicazione MapReduce, è necessario aggiungere anche queste risorse.If your workflow used other resources, such as a jar that contains a MapReduce application, you need to add those resources as well.

Definire la query HiveDefine the Hive query

Usare la procedura seguente per creare uno script HiveQL (linguaggio di query Hive) che definisce una queryUse the following steps to create a Hive query language (HiveQL) script that defines a query. che verrà usata in un flusso di lavoro Oozie più avanti in questo documento.You will use the query in an Oozie workflow later in this document.

  1. Dalla connessione SSH, usare il comando seguente per creare un file denominato useooziewf.hql:From the SSH connection, use the following command to create a file named useooziewf.hql:

    nano useooziewf.hql
    
  2. All'apertura dell'editor nano GNU, usare la query seguente come contenuto del file: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;
    

    Nello script vengono usate due variabili:There are two variables used in the script:

    • ${hiveTableName}: contiene il nome della tabella da creare.${hiveTableName}: Contains the name of the table to be created.

    • ${hiveDataFolder}: contiene il percorso in cui archiviare i file di dati per la tabella.${hiveDataFolder}: Contains the location to store the data files for the table.

      Il file di definizione del flusso di lavoro, in questa esercitazione workflow.xml, passa questi valori allo script HiveQL in fase di esecuzione.The workflow definition file, workflow.xml in this tutorial, passes these values to this HiveQL script at runtime.

  3. Per uscire dall'editor, premere CTRL+X.To exit the editor, select Ctrl+X. Quando richiesto, selezionare Y per salvare il file, immettere useooziewf.hql come nome del file e quindi premere INVIO.When prompted, select Y to save the file, enter useooziewf.hql as the file name, and then select Enter.

  4. Per copiare useooziewf.hql in wasb:///tutorials/useoozie/useooziewf.hql, usare i comandi riportati di seguito:Use the following commands to copy useooziewf.hql to wasb:///tutorials/useoozie/useooziewf.hql:

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

    Questo comando archivia il file useooziewf.hql nella risorsa di archiviazione compatibile con HDFS per il cluster.This command stores the useooziewf.hql file in the HDFS-compatible storage for the cluster.

Definire il flusso di lavoroDefine the workflow

Le definizioni del flusso di lavoro di Oozie sono scritte in un linguaggio di definizione dei processi XML denominato hPDL (Hadoop Process Definition Language).Oozie workflow definitions are written in Hadoop Process Definition Language (hPDL), which is an XML process definition language. Usare i passaggi seguenti per definire il flusso di lavoro:Use the following steps to define the workflow:

  1. Usare l'istruzione seguente per creare e modificare un nuovo file:Use the following statement to create and edit a new file:

    nano workflow.xml
    
  2. All'apertura dell'editor nano, immettere il codice XML seguente come contenuto del file: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>sqljdbc41.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>
    

    Nel flusso di lavoro vengono definite due azioni:There are two actions defined in the workflow:

    • RunHiveScript: azione di avvio che esegue lo script useooziewf.hql di Hive.RunHiveScript: This action is the start action and runs the useooziewf.hql Hive script.

    • RunSqoopExport: azione che esporta i dati creati dallo script Hive nel database SQL tramite Sqoop.RunSqoopExport: This action exports the data created from the Hive script to a SQL database by using Sqoop. Questa azione viene eseguita solo se l'azione RunHiveScript ha esito positivo.This action only runs if the RunHiveScript action is successful.

      Il flusso di lavoro include molte voci, ad esempio ${jobTracker}.The workflow has several entries, such as ${jobTracker}. Sostituire queste voci con i valori usati nella definizione del processo,You will replace these entries with the values you use in the job definition. che verrà creata più avanti in questo documento.You will create the job definition later in this document.

      Notare anche la voce <archive>sqljdbc4.jar</archive> nella sezione Sqoop.Also note the <archive>sqljdbc4.jar</archive> entry in the Sqoop section. Questa voce indica a Oozie di rendere disponibile questo archivio per Sqoop quando l'azione viene eseguita.This entry instructs Oozie to make this archive available for Sqoop when this action runs.

  3. Per salvare il file, selezionare CTRL+X, immettere Y e quindi selezionare INVIO.To save the file, select Ctrl+X, enter Y, and then select Enter.

  4. Usare il comando seguente per copiare il file workflow.xml in /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
    

Creare il databaseCreate the database

Per creare un database SQL, attenersi alla procedura illustrata nel documento Creare un database SQL.To create a SQL database, follow the steps in the Create a SQL database document. Quando si crea il database, usare oozietest come nome del database.When you create the database, use oozietest as the database name. Annotare anche il nome del server di database.Also make a note of the name of the database server.

Creare la tabellaCreate the table

Nota

Sono disponibili diversi modi per connettersi al database SQL per creare una tabella.There are many ways to connect to SQL Database to create a table. Nei seguenti passaggi viene usato FreeTDS dal cluster HDInsight.The following steps use FreeTDS from the HDInsight cluster.

  1. Usare il comando seguente per installare FreeTDS nel cluster HDInsight:Use the following command to install FreeTDS on the HDInsight cluster:

    sudo apt-get --assume-yes install freetds-dev freetds-bin
    
  2. Dopo aver installato FreeTDS, usare il comando seguente per connettersi al server del database SQL creato in precedenza:After FreeTDS has been installed, use the following command to connect to the SQL database server you created previously:

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

    L'output ricevuto ha un aspetto simile al testo seguente: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. Al prompt di 1> , immettere il codice seguente: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
    

    Dopo aver immesso l'istruzione GO, vengono valutate le istruzioni precedenti.When the GO statement is entered, the previous statements are evaluated. Queste istruzioni creano una tabella denominata mobiledata, usata dal flusso di lavoro.These statements create a table, named mobiledata, that's used by the workflow.

    Per verificare che la tabella sia stata creata, usare i comandi seguenti:To verify that the table has been created, use the following commands:

    SELECT * FROM information_schema.tables
    GO
    

    Viene visualizzato un output simile al testo seguente:You see output like the following text:

     TABLE_CATALOG   TABLE_SCHEMA    TABLE_NAME      TABLE_TYPE
     oozietest       dbo     mobiledata      BASE TABLE
    
  4. Per uscire dall'utilità tsql, immettere exit al prompt 1>.To exit the tsql utility, enter exit at the 1> prompt.

Creare la definizione del processoCreate the job definition

La definizione del processo descrive dove trovare il file workflow.xml.The job definition describes where to find the workflow.xml. Descrive inoltre dove trovare altri file usati dal flusso di lavoro, ad esempio useooziewf.hql.It also describes where to find other files used by the workflow, such as useooziewf.hql. Definisce inoltre i valori delle proprietà usate nel flusso di lavoro e nei file associati.In addition, it defines the values for properties used within the workflow and the associated files.

  1. Per ottenere l'indirizzo completo della risorsa di archiviazione predefinita, usare il comando seguente.To get the full address of the default storage, use the following command. L'indirizzo viene usato nel file di configurazione che verrà creato nel passaggio successivo.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
    

    Questo comando restituisce informazioni simili al codice XML seguente:This command returns information like the following XML:

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

    Nota

    Se il cluster HDInsight usa l'archiviazione di Azure come percorso di archiviazione predefinito, il contenuto dell'elemento <value> inizia con wasb://.If the HDInsight cluster uses Azure Storage as the default storage, the <value> element contents begin with wasb://. Se, invece, viene usato Azure Data Lake Store, il contenuto inizia con adl://.If Azure Data Lake Store is used instead, it begins with adl://.

    Salvare il contenuto dell'elemento <value>, necessario nei passaggi successivi.Save the contents of the <value> element, as it's used in the next steps.

  2. Per creare la configurazione della definizione del processo Oozie, usare il comando seguente:To create the Oozie job definition configuration, use the following command:

    nano job.xml
    
  3. All'apertura dell'editor nano, usare il codice XML seguente come contenuto del file:After the nano editor opens, use the following XML as the contents of the file:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
    
        <property>
        <name>nameNode</name>
        <value>wasb://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>wasb://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>wasb://mycontainer@mystorageaccount.blob.core.windows.net/tutorials/useoozie/data</value>
        </property>
    
        <property>
        <name>sqlDatabaseConnectionString</name>
        <value>"jdbc:sqlserver://serverName.database.windows.net;user=adminLogin;password=adminPassword;database=oozietest"</value>
        </property>
    
        <property>
        <name>sqlDatabaseTableName</name>
        <value>mobiledata</value>
        </property>
    
        <property>
        <name>user.name</name>
        <value>YourName</value>
        </property>
    
        <property>
        <name>oozie.wf.application.path</name>
        <value>wasb://mycontainer@mystorageaccount.blob.core.windows.net/tutorials/useoozie</value>
        </property>
    </configuration>
    
    • Sostituire tutte le istanze di wasb://mycontainer@mystorageaccount.blob.core.windows.net con il valore ricevuto in precedenza per la risorsa di archiviazione predefinita.Replace all instances of wasb://mycontainer@mystorageaccount.blob.core.windows.net with the value you received earlier for the default storage.

      Avviso

      Se il percorso è un percorso wasb, è necessario usare il percorso completo,If the path is a wasb path, you must use the full path. che non deve essere abbreviato in wasb:///.Do not shorten it to just wasb:///.

    • Sostituire YourName con il proprio nome di accesso per il cluster HDInsight.Replace YourName with your login name for the HDInsight cluster.

    • Sostituire serverName, adminLogin e adminPassword con le informazioni relative al database SQL.Replace serverName, adminLogin, and adminPassword with the information for your SQL database.

      La maggior parte delle informazioni in questo file viene usata per popolare i valori usati nel file workflow.xml o ooziewf.hql (ad esempio ${nameNode}).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}.

      Nota

      La voce oozie.wf.application.path definisce il percorso in cui trovare il file workflow.xml,The oozie.wf.application.path entry defines where to find the workflow.xml file. che contiene il flusso di lavoro eseguito da questo processo.This file contains the workflow that was run by this job.

  4. Per salvare il file, selezionare CTRL+X, immettere Y e quindi selezionare INVIO.To save the file, select Ctrl+X, enter Y, and then select Enter.

Inviare e gestire il processoSubmit and manage the job

La procedura seguente usa il comando Oozie per inviare e gestire i flussi di lavoro di Oozie nel cluster.The following steps use the Oozie command to submit and manage Oozie workflows on the cluster. Il comando Oozie è un'interfaccia utente semplice per l' API REST di Oozie.The Oozie command is a friendly interface over the Oozie REST API.

Importante

Quando si usa il comando Oozie, è necessario usare l'FQDN per il nodo head di HDInsight.When you use the Oozie command, you must use the FQDN for the HDInsight head node. Questo FQDN è accessibile solo dal cluster o, se il cluster si trova in una rete virtuale di Azure, da altri computer nella stessa rete.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. Per ottenere l'URL del servizio di Oozie, usare questo comando: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
    

    Vengono restituite informazioni simili al codice XML seguente:This returns information like the following XML:

    <name>oozie.base.url</name>
    <value>http://hn0-CLUSTERNAME.randomcharacters.cx.internal.cloudapp.net:11000/oozie</value>
    

    La parte http://hn0-CLUSTERNAME.randomcharacters.cx.internal.cloudapp.net:11000/oozie è l'URL da usare con il comando Oozie.The http://hn0-CLUSTERNAME.randomcharacters.cx.internal.cloudapp.net:11000/oozie portion is the URL to use with the Oozie command.

  2. Per creare una variabile di ambiente per l'URL, usare il codice seguente, in modo che non sia necessario eseguirne la digitazione per ogni comando: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
    

    Sostituire l'URL con quello ricevuto in precedenza.Replace the URL with the one you received earlier.

  3. Per inviare il processo, usare quanto segue:To submit the job, use the following:

    oozie job -config job.xml -submit
    

    Questo comando carica le informazioni sul processo da job.xml e le invia a Oozie, ma senza eseguirle.This command loads the job information from job.xml and submits it to Oozie, but does not run it.

    Dopo il completamento, il comando dovrebbe restituire l'ID del processo, ad esempio 0000005-150622124850154-oozie-oozi-W.After the command finishes, it should return the ID of the job, for example, 0000005-150622124850154-oozie-oozi-W. L'ID viene usato per gestire il processo.This ID is used to manage the job.

  4. Per visualizzare lo stato del processo, usare il comando seguente:To view the status of the job, use the following command:

    oozie job -info <JOBID>
    

    Nota

    Sostituire <JOBID> con l'ID restituito nel passaggio precedente.Replace <JOBID> with the ID returned in the previous step.

    Verranno restituite informazioni simili al testo seguente: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: -
     ------------------------------------------------------------------------------------------------------------------------------------
    

    Lo stato del processo è PREP.This job has a status of PREP. Questo stato indica che il processo è stato creato, ma non avviato.This status indicates that the job was created, but not started.

  5. Per avviare il processo, usare il comando seguente:To start the job, use the following command:

    oozie job -start JOBID
    

    Nota

    Sostituire <JOBID> con l'ID restituito in precedenza.Replace <JOBID> with the ID returned previously.

    Dopo questo comando, lo stato risulterà in esecuzione e verranno restituite informazioni relative alle azioni all'interno del processo.If you check the status after this command, it's in a running state, and information is returned for the actions within the job.

  6. Dopo aver completato l'attività, è possibile verificare che i dati siano stati generati ed esportati nella tabella del database SQL tramite i comandi seguenti: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:

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

    Al prompt di 1> immettere la query seguente:At the 1> prompt, enter the following query:

    SELECT * FROM mobiledata
    GO
    

    Le informazioni restituite sono simili al testo seguente: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)
    

Per altre informazioni sul comando Oozie, vedere Oozie command-line tool (Strumento da riga di comando di Oozie).For more information on the Oozie command, see Oozie command-line tool.

API REST di OozieOozie REST API

Con l'API REST di Oozie, è possibile compilare strumenti personalizzati che funzionano con Oozie.With the Oozie REST API, you can build your own tools that work with Oozie. Di seguito sono riportate informazioni specifiche di HDInsight sull'uso dell'API REST di Oozie:The following is HDInsight-specific information about the use of the Oozie REST API:

  • URI: è possibile accedere all'API REST all'esterno del cluster in https://CLUSTERNAME.azurehdinsight.net/oozie.URI: You can access the REST API from outside the cluster at https://CLUSTERNAME.azurehdinsight.net/oozie.

  • Autenticazione: per eseguire l'autenticazione, usare l'API, l'account (admin) e la password HTTP del cluster,Authentication: To authenticate, use the API the cluster HTTP account (admin) and password. ad esempio:For example:

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

Per altre informazioni sull'uso dell'API REST di Oozie, vedere la pagina relativa all'API dei servizi Web di Oozie.For more information on how to use the Oozie REST API, see Oozie Web Services API.

Interfaccia utente Web di OozieOozie web UI

L'interfaccia utente Web di Oozie fornisce una visualizzazione basata sul Web dello stato dei processi Oozie nel cluster.The Oozie web UI provides a web-based view into the status of Oozie jobs on the cluster. L'interfaccia utente Web consente di visualizzare le informazioni seguenti:With the web UI you can view the following information:

  • Stato processoJob status
  • Definizione del processoJob definition
  • ConfigurazioneConfiguration
  • Grafico delle azioni nel processoA graph of the actions in the job
  • Log per il processoLogs for the job

È anche possibile visualizzare i dettagli delle azioni all'interno di un processo.You can also view the details for the actions within a job.

Per accedere all'interfaccia utente Web di Oozie, completare la procedura seguente:To access the Oozie web UI, complete the following steps:

  1. Creare un tunnel SSH per il cluster HDInsight.Create an SSH tunnel to the HDInsight cluster. Per altre informazioni, vedere Usare il tunneling SSH con HDInsight.For more information, see Use SSH Tunneling with HDInsight.

  2. Dopo aver creato un tunnel, aprire l'interfaccia utente Web di Ambari nel Web browser.After you create a tunnel, open the Ambari web UI in your web browser. L'URI per il sito Ambari è https://CLUSTERNAME.azurehdinsight.net.The URI for the Ambari site is https://CLUSTERNAME.azurehdinsight.net. Sostituire CLUSTERNAME con il nome del cluster HDInsight basato su Linux.Replace CLUSTERNAME with the name of your Linux-based HDInsight cluster.

  3. Nel lato sinistro della pagina selezionare Oozie > Quick Links (Collegamenti rapidi) > Oozie Web UI (Interfaccia utente Web di Oozie).From the left side of the page, select Oozie > Quick Links > Oozie Web UI.

    Immagine dei menu

  4. Per impostazione predefinita, nell'interfaccia utente Web di Oozie sono visualizzati i processi del flusso di lavoro in esecuzione.The Oozie web UI defaults to display the running workflow jobs. Per visualizzare tutti i processi del flusso di lavoro, selezionare All Jobs (Tutti i processi).To see all the workflow jobs, select All Jobs.

    Tutti i processi visualizzati

  5. Per visualizzare altre informazioni specifiche di un processo, selezionarlo.To view more information about a job, select the job.

    Job Info

  6. Nella scheda Job Info (Informazioni processo) è possibile visualizzare informazioni di base sul processo e le singole azioni all'interno del processo.From the Job Info tab, you can see the basic job information and the individual actions within the job. È possibile usare le schede nella parte superiore per visualizzare Job Definition (Definizione processo) e Job Configuration (Configurazione processo), accedere a Job Log (Log processo) o visualizzare un grafo aciclico diretto (DAG) del processo in Job DAG (DAG processo).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.

    • Job Log (Log processo): selezionare il pulsante Get Logs (Ottieni log) per recuperare tutti i log relativi al processo o usare il campo Enter Search Filter (Immetti filtro di ricerca) per filtrare i log.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.

      Job Log (Log processo)

    • Job DAG (DAG processo): il grafo aciclico diretto (DAG) è una rappresentazione grafica dei percorsi dati rilevati nel flusso di lavoro.Job DAG: The DAG is a graphical overview of the data paths taken through the workflow.

      DAG del processo

  7. Se si seleziona una delle azioni dalla scheda Job Info (Informazioni processo), vengono visualizzate informazioni sull'azione.If you select one of the actions from the Job Info tab, it brings up information for the action. Selezionare ad esempio l'azione RunSqoopExport.For example, select the RunSqoopExport action.

    Informazioni sull'azione

  8. È possibile visualizzare i dettagli per l'azione, ad esempio un collegamento a Console URL (URL della console).You can see details for the action, such as a link to the Console URL. Usare questo collegamento per visualizzare le informazioni di JobTracker per il processo.Use this link to view job tracker information for the job.

Pianificare i processiSchedule jobs

È possibile usare il coordinatore per specificare inizio, fine e frequenza dei processi.You can use the coordinator to specify a start, an end, and the occurrence frequency for jobs. Per definire una pianificazione per il flusso di lavoro, completare la procedura seguente:To define a schedule for the workflow, complete the following steps:

  1. Usare il comando seguente per creare un file denominato coordinator.xml:Use the following command to create a file named coordinator.xml:

    nano coordinator.xml
    

    Usare il codice XML seguente come contenuto del file: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>
    

    Nota

    Le variabili ${...} vengono sostituite dai valori nella definizione del processo in fase di esecuzione.The ${...} variables are replaced by values in the job definition at runtime. Le variabili sono:The variables are:

    • ${coordFrequency}: tempo trascorso tra l'esecuzione delle istanze del processo.${coordFrequency}: The time between running instances of the job.
    • ${coordStart}: ora di inizio del processo.${coordStart}: The job start time.
    • ${coordEnd}: ora di fine del processo.${coordEnd}: The job end time.
    • ${coordTimezone}: i processi del coordinatore si trovano in un fuso orario fisso che non tiene conto dell'ora legale (in genere rappresentato dall'acronimo UTC).${coordTimezone}: Coordinator jobs are in a fixed time zone with no daylight savings time, typically represented by using UTC. Questo fuso orario viene definito Fuso orario di elaborazione Oozie.This time zone is referred as the Oozie processing timezone.
    • ${wfPath}: percorso del file workflow.xml.${wfPath}: The path to the workflow.xml.
  2. Per salvare il file, selezionare CTRL+X, immettere Y e quindi selezionare INVIO.To save the file, select Ctrl+X, enter Y, and then select Enter.

  3. Per copiare il file nella directory di lavoro del processo, usare il comando seguente: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. Per modificare il file job.xml, usare il comando seguente:To modify the job.xml file, use the following command:

    nano job.xml
    

    Apportare le modifiche seguenti:Make the following changes:

    • Per indicare a Oozie di eseguire il file del coordinatore invece del flusso di lavoro, sostituire <name>oozie.wf.application.path</name> con <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>.

    • Per impostare la variabile workflowPath usata dal coordinatore, aggiornare il codice XML seguente:To set the workflowPath variable used by the coordinator, add the following XML:

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

      Sostituire il testo wasb://mycontainer@mystorageaccount.blob.core.windows con il valore usato nelle altre voci del file job.xlm.Replace the wasb://mycontainer@mystorageaccount.blob.core.windows text with the value used in the other entries in the job.xml file.

    • Per definire l'inizio, la fine e la frequenza per il coordinatore, aggiungere il codice XML seguente:To define the start, end, and frequency for the coordinator, add the following XML:

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

      Questi valori impostano l'ora di inizio sulle 12:00 del 10 maggio 2017 e l'ora di fine sul 12 maggio 2017.These values set the start time to 12:00 PM on May 10, 2017, and the end time to May 12, 2017. L'intervallo per l'esecuzione del processo viene impostato come giornaliero.The interval for running this job is set to daily. La frequenza è espressa in minuti, quindi 24 ore x 60 minuti = 1440 minuti.The frequency is in minutes, so 24 hours x 60 minutes = 1440 minutes. Il fuso orario è infine impostato su UTC.Finally, the time zone is set to UTC.

  5. Per salvare il file, selezionare CTRL+X, immettere Y e quindi selezionare INVIO.To save the file, select Ctrl+X, enter Y, and then select Enter.

  6. Per eseguire il processo, usare il comando seguente:To run the job, use the following command:

    oozie job -config job.xml -run
    

    Il comando invia e avvia il processo.This command submits and starts the job.

  7. Se si accede all'interfaccia utente Web di Oozie e si seleziona la scheda Coordinator Jobs (Processi coordinatore), si ottengono informazioni simili a quelle nell'immagine seguente:If you go to the Oozie web UI and select the Coordinator Jobs tab, you see information like in the following image:

    Scheda Coordinator Jobs (Processi coordinatore)

    La voce Next Materialization (Materializzazione successiva) contiene l'orario per l'esecuzione successiva del processo.The Next Materialization entry contains the next time that the job runs.

  8. Come per il processo del flusso di lavoro precedente, se si seleziona la voce del processo nell'interfaccia utente Web vengono visualizzate informazioni sul processo:Like the earlier workflow job, if you select the job entry in the web UI it displays information on the job:

    Informazioni processo del coordinatore

    Nota

    Questa immagine visualizza solo le esecuzioni riuscite del processo, non le singole azioni nel flusso di lavoro pianificato.This image only shows successful runs of the job, not the individual actions within the scheduled workflow. Per visualizzare le singole azioni, selezionare una delle voci relative alle azioni.To see the individual actions, select one of the Action entries.

    Informazioni sull'azione

Risoluzione dei problemiTroubleshooting

L'interfaccia utente di Oozie consente di visualizzare i log di Oozie.With the Oozie UI, you can view Oozie logs. Contiene anche collegamenti ai log di JobTracker per le attività di MapReduce avviate dal flusso di lavoro.The Oozie UI also contains links to the JobTracker logs for the MapReduce tasks that were started by the workflow. Il modello per la risoluzione dei problemi deve essere il seguente:The pattern for troubleshooting should be:

  1. Visualizzare il processo nell'interfaccia utente Web di Oozie.View the job in Oozie web UI.

  2. Se si verifica un errore o un problema per un'azione specifica, selezionare l'azione per vedere se il campo Error Message fornisce altre informazioni sull'errore.If there is 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. Se disponibile, usare l'URL dall'azione per visualizzare altri dettagli relativi all'azione, ad esempio i log di JobTracker.If available, use the URL from the action to view more details, such as the JobTracker logs, for the action.

Di seguito sono riportati errori specifici che possono verificarsi e viene indicato come risolverli.The following are specific errors you might encounter and how to resolve them.

JA009: Cannot initialize clusterJA009: Cannot initialize cluster

Sintomi: lo stato del processo cambia in SUSPENDED.Symptoms: The job status changes to SUSPENDED. I dettagli del processo mostrano lo stato di RunHiveScript come START_MANUAL.Details for the job show the RunHiveScript status as START_MANUAL. Selezionando l'azione verrà visualizzato il messaggio di errore seguente:Selecting the action displays the following error message:

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

Causa: gli indirizzi di archiviazione BLOB di Azure usati nel file job.xml non includono il contenitore di archiviazione o il nome dell'account di archiviazione.Cause: The Azure Blob storage addresses used in the job.xml file doesn't contain the storage container or storage account name. Il formato dell'indirizzo di archiviazione BLOB deve essere wasb://containername@storageaccountname.blob.core.windows.net.The Blob storage address format must be wasb://containername@storageaccountname.blob.core.windows.net.

Risoluzione: modificare gli indirizzi di archiviazione BLOB usati dal processo.Resolution: Change the Blob storage addresses that the job uses.

JA002: Oozie is not allowed to impersonate <USER>JA002: Oozie is not allowed to impersonate <USER>

Sintomi: lo stato del processo cambia in SUSPENDED.Symptoms: The job status changes to SUSPENDED. I dettagli del processo mostrano lo stato di RunHiveScript come START_MANUAL.Details for the job show the RunHiveScript status as START_MANUAL. Se si seleziona l'azione, viene visualizzato il messaggio di errore seguente:If you select the action, it shows the following error message:

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

Causa: le impostazioni di autorizzazione correnti non consentono a Oozie di rappresentare l'account utente specificato.Cause: The current permission settings don't allow Oozie to impersonate the specified user account.

Risoluzione: Oozie può rappresentare gli utenti nel gruppo users.Resolution: Oozie can impersonate users in the users group. Usare groups USERNAME per visualizzare i gruppi di cui l'account utente è membro.Use the groups USERNAME to see the groups that the user account is a member of. Se l'utente non è un membro del gruppo users , usare il comando seguente per aggiungere l'utente al gruppo:If the user is not a member of the users group, use the following command to add the user to the group:

sudo adduser USERNAME users

Nota

Potrebbero essere necessari alcuni minuti prima che HDInsight riconosca che l'utente è stato aggiunto al gruppo.It can take several minutes before HDInsight recognizes that the user has been added to the group.

ERRORE dell'utilità di avvio (Sqoop)Launcher ERROR (Sqoop)

Sintomi: lo stato del processo cambia in KILLED.Symptoms: The job status changes to KILLED. I dettagli del processo mostrano lo stato di RunSqoopExport come ERROR.Details for the job show the RunSqoopExport status as ERROR. Se si seleziona l'azione, viene visualizzato il messaggio di errore seguente: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]

Causa: Sqoop non è in grado di caricare il driver del database necessario per accedere al database.Cause: Sqoop is unable to load the database driver required to access the database.

Risoluzione: quando si usa Sqoop da un processo Oozie, è necessario includere il driver del database con le altre risorse usate dal processo, ad esempio workflow.xml.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. Fare inoltre riferimento all'archivio contenente il driver del database dalla sezione <sqoop>...</sqoop> di workflow.xml.Also, reference the archive that contains the database driver from the <sqoop>...</sqoop> section of the workflow.xml.

Ad esempio, per il processo in questo documento si useranno i passaggi seguenti:For example, for the job in this document, you would use the following steps:

  1. Copiare il file sqljdbc4.1.jar nella directory /tutorials/useoozie:Copy the sqljdbc4.1.jar file to the /tutorials/useoozie directory:

    hdfs dfs -put /usr/share/java/sqljdbc_4.1/enu/sqljdbc41.jar /tutorials/useoozie/sqljdbc41.jar
    
  2. Modificare workflow.xml per aggiungere il codice XML seguente in una nuova riga sopra </sqoop>:Modify the workflow.xml to add the following XML on a new line above </sqoop>:

    <archive>sqljdbc41.jar</archive>
    

Passaggi successiviNext steps

In questa esercitazione si è appreso come definire un flusso di lavoro di Oozie e come eseguire un processo Oozie.In this tutorial, you learned how to define an Oozie workflow and how to run an Oozie job. Per altre informazioni sull'uso di HDInsight, vedere gli articoli seguenti:To learn more about how to work with HDInsight, see the following articles: