Usare il coordinatore di Oozie basato sul tempo con Hadoop in HDInsight per definire flussi di lavoro e coordinare processiUse time-based Oozie coordinator with Hadoop in HDInsight to define workflows and coordinate jobs

Questo articolo descrive come definire flussi di lavoro e coordinatori e come attivare i processi del coordinatore in base al tempo.In this article, you'll learn how to define workflows and coordinators, and how to trigger the coordinator jobs, based on time. Prima di procedere può essere utile vedere Usare Oozie con HDInsight.It is helpful to go through Use Oozie with HDInsight before you read this article. Oltre a Oozie, è possibile pianificare processi anche con Azure Data Factory.In addition to Oozie, you can also schedule jobs using Azure Data Factory. Per informazioni su Azure Data Factory, vedere Usare Pig e Hive con Data factory.To learn Azure Data Factory, see Use Pig and Hive with Data Factory.

Nota

Questo articolo richiede un cluster HDInsight basato su Windows.This article requires a Windows-based HDInsight cluster. Per informazioni sull'utilizzo di Oozie, inclusi i processi basati sul tempo, in un cluster basato su Linux, vedere utilizzo di Oozie con Hadoop per definire ed eseguire un flusso di lavoro in HDInsight basati su LinuxFor information on using Oozie, including time-based jobs, on a Linux-based cluster, see Use Oozie with Hadoop to define and run a workflow on Linux-based HDInsight

Informazioni su OozieWhat is Oozie

Apache Oozie è un sistema di flusso di lavoro/coordinamento che consente di gestire i processi Hadoop.Apache Oozie is a workflow/coordination system that manages Hadoop jobs. È integrato nello stack di Hadoop e supporta i processi Hadoop per Apache MapReduce, Apache Pig, Apache Hive e Apache Sqoop.It is integrated with the Hadoop stack, and it supports Hadoop jobs for Apache MapReduce, Apache Pig, Apache Hive, and Apache Sqoop. Può anche essere usato per pianificare processi specifici di un sistema, come i programmi Java o gli script della shell.It can also be used to schedule jobs that are specific to a system, such as Java programs or shell scripts.

L'immagine seguente illustra il flusso di lavoro che verrà implementato:The following image shows the workflow you will implement:

Diagramma del flusso di lavoro

Il flusso di lavoro contiene due azioni:The workflow contains two actions:

  1. Un'azione di Hive esegue uno script HiveQL per contare le occorrenze di ogni tipo di livello di log in un file log4j.A Hive action runs a HiveQL script to count the occurrences of each log-level type in a log4j log file. Ogni log log4j è costituito da una riga di campi che contiene un campo [LOG LEVEL] per visualizzare il tipo e la gravità. Ad esempio:Each log4j log consists of a line of fields that contains a [LOG LEVEL] field to show the type and the severity, for example:

     2012-02-03 18:35:34 SampleClass6 [INFO] everything normal for id 577725851
     2012-02-03 18:35:34 SampleClass4 [FATAL] system problem at id 1991281254
     2012-02-03 18:35:34 SampleClass3 [DEBUG] detail for id 1304807656
     ...
    

    L'output dello script Hive è simile al seguente:The Hive script output is similar to:

     [DEBUG] 434
     [ERROR] 3
     [FATAL] 1
     [INFO]  96
     [TRACE] 816
     [WARN]  4
    

    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 l'output dell'azione di HiveQL in una tabella di un database SQL di Azure.A Sqoop action exports the HiveQL action output to a table in an Azure SQL database. Per altre informazioni su Sqoop, vedere Usare Sqoop con HDInsight.For more information about Sqoop, see Use 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 cluster versions provided by HDInsight?.

PrerequisitiPrerequisites

Prima di iniziare questa esercitazione, è necessario disporre di quanto segue:Before you begin this tutorial, you must have the following:

  • Workstation con Azure PowerShell.A workstation with Azure PowerShell.

    Importante

    Il supporto di Azure PowerShell per la gestione delle risorse HDInsight tramite Azure Service Manager è deprecato e verrà rimosso dal 1° gennaio 2017.Azure PowerShell support for managing HDInsight resources using Azure Service Manager is deprecated, and will be removed by January 1, 2017. La procedura descritta in questo documento usa i nuovi cmdlet HDInsight, compatibili con Azure Resource Manager.The steps in this document use the new HDInsight cmdlets that work with Azure Resource Manager.

    Per installare la versione più recente, seguire la procedura descritta in Come installare e configurare Azure PowerShell .Please follow the steps in Install and configure Azure PowerShell to install the latest version of Azure PowerShell. Se sono presenti script che devono essere modificati per l'uso dei nuovi cmdlet compatibili con Azure Resource Manager, per altre informazioni vedere Migrazione a strumenti di sviluppo basati su Azure Resource Manager per i cluster HDInsight.If you have scripts that need to be modified to use the new cmdlets that work with Azure Resource Manager, see Migrating to Azure Resource Manager-based development tools for HDInsight clusters for more information.

  • Un cluster HDInsight.An HDInsight cluster. Per informazioni sulla creazione di un cluster HDInsight, vedere Creare cluster HDInsight o Introduzione a HDInsight.For information about creating an HDInsight cluster, see Create HDInsight clusters, or Get started with HDInsight. Per completare l'esercitazione sono necessari i dati seguenti:You will need the following data to go through the tutorial:

    Proprietà del clusterCluster propertyNome variabile di Windows PowerShellWindows PowerShell variable nameValoreValueDescrizioneDescription
    Nome del cluster HDInsightHDInsight cluster name$clusterName$clusterNameCluster HDInsight su cui si eseguirà questa esercitazione.The HDInsight cluster on which you will run this tutorial.
    Nome utente del cluster HDInsightHDInsight cluster username$clusterUsername$clusterUsernameNome utente del cluster HDInsight.The HDInsight cluster user name.
    Password utente del cluster HDInsightHDInsight cluster user password $clusterPassword$clusterPasswordLa password utente del cluster HDInsight.The HDInsight cluster user password.
    Nome dell'account di archiviazione di AzureAzure storage account name$storageAccountName$storageAccountNameUn account di archiviazione di Azure disponibile per il cluster HDInsight.An Azure Storage account available to the HDInsight cluster. Ai fini di questa esercitazione, usare l'account di archiviazione predefinito, specificato durante il processo di provisioning del cluster.For this tutorial, use the default storage account that you specified during the cluster provision process.
    Nome del contenitore BLOB di AzureAzure Blob container name$containerName$containerNamePer questo esempio, usare il contenitore di archiviazione BLOB di Azure usato come file system predefinito del cluster HDInsight.For this example, use the Azure Blob storage container that is used for the default HDInsight cluster file system. Per impostazione predefinita, il nome del contenitore corrisponde al nome del cluster HDInsight.By default, it has the same name as the HDInsight cluster.
  • Un database SQL di Azure.An Azure SQL database. È necessario configurare una regola del firewall per il server di database SQL per consentire l'accesso dalla workstation.You must configure a firewall rule for the SQL Database server to allow access from your workstation. Per istruzioni sulla creazione di un database SQL di Azure e sulla configurazione del firewall, vedere l'introduzione all'uso del database SQL di Azure.For instructions about creating an Azure SQL database and configuring the firewall, see Get started using Azure SQL database. Questo articolo fornisce uno script di Windows PowerShell per consentire la creazione della tabella del database SQL di Azure necessaria per questa esercitazione.This article provides a Windows PowerShell script for creating the Azure SQL database table that you need for this tutorial.

    Proprietà del database SQLSQL database propertyNome variabile di Windows PowerShellWindows PowerShell variable nameValoreValueDescrizioneDescription
    Nome del server di database SQLSQL database server name$sqlDatabaseServer$sqlDatabaseServerIl server di database SQL in cui Sqoop esporterà i dati.The SQL database server to which Sqoop will export data.
    Nome di accesso al database SQLSQL database login name$sqlDatabaseLogin$sqlDatabaseLoginIl nome di accesso al database SQL.SQL Database login name.
    Password di accesso al database SQLSQL database login password$sqlDatabaseLoginPassword$sqlDatabaseLoginPasswordLa password di accesso al database SQL.SQL Database login password.
    Nome del database SQLSQL database name$sqlDatabaseName$sqlDatabaseNameIl database SQL di Azure in cui Sqoop esporterà i dati.The Azure SQL database to which Sqoop will export data.

    Nota

    Per impostazione predefinita, un database SQL di Azure consente connessioni da servizi di Azure, ad esempio Azure HDinsight.By default an Azure SQL database allows connections from Azure Services, such as Azure HDInsight. Se questa impostazione del firewall è disabilitata, sarà necessario abilitarla nel portale di Azure.If this firewall setting is disabled, you must enable it from the Azure Portal. Per istruzioni sulla creazione di un database SQL e sulla configurazione di regole del firewall, vedere Creare e configurare un database SQL.For instruction about creating a SQL Database and configuring firewall rules, see Create and Configure SQL Database.

Nota

L'inserimento dei valori nelle tabelleFill-in the values in the tables. potrà essere utile per completare questa esercitazione.It will be helpful for going through this tutorial.

Le definizioni dei flussi di lavoro di Oozie sono scritte in linguaggio hPDL (XML Process Definition Language).Oozie workflows definitions are written in hPDL (an XML process definition language). Il nome del file del flusso di lavoro predefinito è workflow.xml.The default workflow file name is workflow.xml. Il file del flusso di lavoro verrà salvato a livello locale e distribuito nel cluster HDInsight tramite Azure PowerShell più avanti in questa esercitazione.You will save the workflow file locally, and then deploy it to the HDInsight cluster by using Azure PowerShell later in this tutorial.

L'azione di Hive nel flusso di lavoro chiama un file di script HiveQLThe Hive action in the workflow calls a HiveQL script file. che contiene tre istruzioni HiveQL:This script file contains three HiveQL statements:

  1. L'istruzione DROP TABLE consente di eliminare la tabella di Hive log4j, se esistente.The DROP TABLE statement deletes the log4j Hive table if it exists.
  2. L'istruzione CREATE TABLE consente di creare una tabella di Hive log4j esterna che punti al percorso del file di log log4j.The CREATE TABLE statement creates a log4j Hive external table, which points to the location of the log4j log file;
  3. Il percorso del file di log log4j.The location of the log4j log file. Il delimitatore di campo è ",".The field delimiter is ",". Il delimitatore di riga predefinito è "\n".The default line delimiter is "\n". La tabella esterna di Hive viene usata per evitare che il file di dati venga rimosso dal percorso originale, nel caso in cui si desideri eseguire il flusso di lavoro di Oozie più volte.A Hive external table is used to avoid the data file being removed from the original location, in case you want to run the Oozie workflow multiple times.
  4. L'istruzione INSERT OVERWRITE conta le occorrenze di ogni tipo di livello di log nella tabella di Hive log4j e salva l'output in un percorso dell'archivio BLOB di Azure.The INSERT OVERWRITE statement counts the occurrences of each log-level type from the log4j Hive table, and it saves the output to an Azure Blob storage location.

Nota

Il percorso di Hive è caratterizzato da un problema notoThere is a known Hive path issue. che si verifica durante l'invio di un processo Oozie.You will run into this problem when submitting an Oozie job. Le istruzioni per la correzione del problema sono disponibili nell'articolo della sezione Wiki di TechNet HDInsight Hive error: Unable to rename (Errore di HDInsight Hive "Impossibile rinominare").The instructions for fixing the issue can be found on the TechNet Wiki: HDInsight Hive error: Unable to rename.

Per definire il file di script HiveQL che deve essere chiamato dal flusso di lavoroTo define the HiveQL script file to be called by the workflow

  1. Creare un file di testo con il contenuto seguente:Create a text file with the following content:

     DROP TABLE ${hiveTableName};
     CREATE EXTERNAL TABLE ${hiveTableName}(t1 string, t2 string, t3 string, t4 string, t5 string, t6 string, t7 string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' STORED AS TEXTFILE LOCATION '${hiveDataFolder}';
     INSERT OVERWRITE DIRECTORY '${hiveOutputFolder}' SELECT t4 AS sev, COUNT(*) AS cnt FROM ${hiveTableName} WHERE t4 LIKE '[%' GROUP BY t4;
    

    Nello script vengono usate tre variabili:There are three variables used in the script:

    • ${hiveTableName}${hiveTableName}
    • ${hiveDataFolder}${hiveDataFolder}
    • ${hiveOutputFolder}${hiveOutputFolder}

      Il file di definizione del flusso di lavoro (workflow.xml in questa esercitazione) passerà questi valori allo script HiveQL in fase di esecuzione.The workflow definition file (workflow.xml in this tutorial) will pass these values to this HiveQL script at run time.

  2. Salvare il file come C:\Tutorials\UseOozie\useooziewf.hql usando la codifica ANSI (ASCII).Save the file as C:\Tutorials\UseOozie\useooziewf.hql by using ANSI (ASCII) encoding. Usare il blocco note se l'editor di testo non offre questa opzione. Il file di script verrà distribuito nel cluster HDInsight più avanti in questa esercitazione.(Use Notepad if your text editor doesn't provide this option.) This script file will be deployed to the HDInsight cluster later in the tutorial.

Per definire un flusso di lavoroTo define a workflow

  1. Creare un file di testo con il contenuto seguente:Create a text file with the following content:

    <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>
                <param>hiveOutputFolder=${hiveOutputFolder}</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>${hiveOutputFolder}</arg>
            <arg>-m</arg>
            <arg>1</arg>
            <arg>--input-fields-terminated-by</arg>
            <arg>"\001"</arg>
            </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. L'azione start-to è RunHiveScript.The start-to action is RunHiveScript. Se l'azione viene eseguita correttamente, l'azione successiva è RunSqoopExport.If the action runs OK, the next action is RunSqoopExport.

    RunHiveScript è caratterizzato da diverse variabili.The RunHiveScript has several variables. I valori verranno passati quando si invia il processo Oozie dalla workstation con Azure PowerShell.You will pass the values when you submit the Oozie job from your workstation by using Azure PowerShell.

    Variabili del flusso di lavoroWorkflow variables

    Variabili del flusso di lavoroWorkflow variablesDescrizioneDescription
    ${jobTracker}${jobTracker}Specifica l'URL dell'utilità di analisi dei processi Hadoop.Specify the URL of the Hadoop job tracker. Usare jobtrackerhost:9010 nel cluster HDInsight versione 3.0 e 2.0.Use jobtrackerhost:9010 on HDInsight cluster version 3.0 and 2.0.
    ${nameNode}${nameNode}Specifica l'URL del nodo dei nomi di Hadoop.Specify the URL of the Hadoop name node. Usare l'indirizzo wasb:// del file system predefinito, ad esempio wasb://&lt;nomecontenitore&gt;@<nomeaccountarchiviazione>.blob.core.windows.net.Use the default file system wasb:// address, for example, wasb://&lt;containerName&gt;@<storageAccountName>.blob.core.windows.net.
    ${queueName}${queueName}Consente di specificare il nome della coda alla quale verrà inviato il processo.Specifies the queue name that the job will be submitted to. Usare l'impostazione predefinita.Use default.

    Variabili dell'azione HiveHive action variables

    Variabile azione HiveHive action variableDescrizioneDescription
    ${hiveDataFolder}${hiveDataFolder}La directory di origine per il comando Hive Create Table.The source directory for the Hive Create Table command.
    ${hiveOutputFolder}${hiveOutputFolder}La cartella di output per l'istruzione INSERT OVERWRITE.The output folder for the INSERT OVERWRITE statement.
    ${hiveTableName}${hiveTableName}Il nome della tabella di Hive che fa riferimento ai file di dati log4j.The name of the Hive table that references the log4j data files.

    Variabili dell'azione SqoopSqoop action variables

    Variabile azione SqoopSqoop action variableDescrizioneDescription
    ${sqlDatabaseConnectionString}${sqlDatabaseConnectionString}Stringa di connessione del database SQL.SQL Database connection string.
    ${sqlDatabaseTableName}${sqlDatabaseTableName}La tabella del database SQL di Azure in cui verranno esportati i dati.The Azure SQL database table to where the data will be exported.
    ${hiveOutputFolder}${hiveOutputFolder}La cartella di output per l'istruzione INSERT OVERWRITE di Hive.The output folder for the Hive INSERT OVERWRITE statement. È la stessa cartella dell'esportazione tramite Sqoop (export-dir).This is the same folder for the Sqoop export (export-dir).

    Per altre informazioni sul flusso di lavoro di Oozie e sull'uso di azioni del flusso di lavoro, vedere la documentazione di Apache Oozie 4.0 (per cluster HDInsight versione 3.0) o la documentazione di Apache Oozie 3.3.2 (per cluster HDInsight versione 2.1).For more information about Oozie workflow and using the workflow actions, see Apache Oozie 4.0 documentation (for HDInsight cluster version 3.0) or Apache Oozie 3.3.2 documentation (for HDInsight cluster version 2.1).

  2. Salvare il file come C:\Tutorials\UseOozie\workflow.xml usando la codifica ANSI (ASCII).Save the file as C:\Tutorials\UseOozie\workflow.xml by using ANSI (ASCII) encoding. Usare il blocco note se l'editor di testo non offre questa opzione.(Use Notepad if your text editor doesn't provide this option.)

Per definire il coordinatoreTo define coordinator

  1. Creare un file di testo con il contenuto seguente:Create a text file with the following content:

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

    Nel file di definizione vengono usate cinque variabili:There are five variables used in the definition file:

    VariabileVariable DescrizioneDescription
    ${coordFrequency}${coordFrequency} Tempo di sospensione del processo.Job pause time. La frequenza è sempre espressa in minuti.Frequency is always expressed in minutes.
    ${coordStart}${coordStart} Ora di inizio del processo.Job start time.
    ${coordEnd}${coordEnd} Ora di fine del processo.Job end time.
    ${coordTimezone}${coordTimezone} Oozie elabora i processi del coordinatore in un fuso orario predefinito che non tiene conto dell'ora legale (in genere rappresentato dall'acronimo UTC).Oozie processes coordinator jobs in a fixed time zone with no daylight saving 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}${wfPath} Percorso del file workflow.xml.The path for the workflow.xml. Se il nome file del flusso di lavoro non è quello predefinito (workflow.xml) sarà necessario specificarlo.If the workflow file name is not the default file name (workflow.xml), you must specify it.
  2. Salvare il file come C:\Tutorials\UseOozie\coordinator.xml usando la codifica ANSI (ASCII).Save the file as C:\Tutorials\UseOozie\coordinator.xml by using the ANSI (ASCII) encoding. Usare il blocco note se l'editor di testo non offre questa opzione.(Use Notepad if your text editor doesn't provide this option.)

Distribuzione del progetto Oozie e operazioni preliminari all'esercitazioneDeploy the Oozie project and prepare the tutorial

Eseguire uno script di Azure PowerShell per completare le seguenti attività:You will run an Azure PowerShell script to perform the following:

  • Copiare lo script di HiveQL (useoozie.hql) nell'archivio BLOB di Azure: wasb:///tutorials/useoozie/useoozie.hql.Copy the HiveQL script (useoozie.hql) to Azure Blob storage, wasb:///tutorials/useoozie/useoozie.hql.
  • Copiare il file workflow.xml in wasb:///tutorials/useoozie/workflow.xml.Copy workflow.xml to wasb:///tutorials/useoozie/workflow.xml.
  • Copiare il file coordinator.xml in wasb:///tutorials/useoozie/coordinator.xml.Copy coordinator.xml to wasb:///tutorials/useoozie/coordinator.xml.
  • Copiare il file di dati (/example/data/sample.log) in wasb:///tutorials/useoozie/data/sample.log.Copy the data file (/example/data/sample.log) to wasb:///tutorials/useoozie/data/sample.log.
  • Creare una tabella di database SQL di Azure per l'archiviazione dei dati di esportazione di Sqoop.Create an Azure SQL database table for storing Sqoop export data. Il nome della tabella è log4jLogCount.The table name is log4jLogCount.

Informazioni sull'archiviazione in HDInsightUnderstand HDInsight storage

HDInsight usa l'archiviazione BLOB di Azure per l'archiviazione dei dati.HDInsight uses Azure Blob storage for data storage. wasb:// è l'implementazione Microsoft di HDFS (Hadoop Distributed File System) nell'archivio BLOB di Azure.wasb:// is Microsoft's implementation of the Hadoop distributed file system (HDFS) in Azure Blob storage. Per altre informazioni, vedere Usare l'archivio BLOB di Azure con HDInsight.For more information, see Use Azure Blob storage with HDInsight.

Quando si effettua il provisioning di un cluster HDInsight, vengono designati come file system predefinito un account di archiviazione BLOB di Azure e un contenitore specifico di tale account, proprio come in HDFS.When you provision an HDInsight cluster, an Azure Blob storage account and a specific container from that account is designated as the default file system, like in HDFS. Oltre a questo account di archiviazione, durante il processo di provisioning è possibile aggiungere anche altri account di archiviazione provenienti dalla stessa sottoscrizione di Azure o da sottoscrizioni di Azure diverse.In addition to this storage account, you can add additional storage accounts from the same Azure subscription or from different Azure subscriptions during the provisioning process. Per istruzioni sull'aggiunta di altri account di archiviazione, vedere Effettuare il provisioning di cluster HDInsight.For instructions about adding additional storage accounts, see Provision HDInsight clusters. Per semplificare lo script di Azure PowerShell usato in questa esercitazione, tutti i file vengono archiviati nel contenitore del file system predefinito, presente in /tutorials/useoozie.To simplify the Azure PowerShell script used in this tutorial, all of the files are stored in the default file system container located at /tutorials/useoozie. Per impostazione predefinita, il nome di questo contenitore corrisponde al nome del cluster HDInsight.By default, this container has the same name as the HDInsight cluster name. La sintassi è:The syntax is:

wasb[s]://<ContainerName>@<StorageAccountName>.blob.core.windows.net/<path>/<filename>

Nota

Nella versione 3.0 del cluster HDInsight è supportata solo la sintassi wasb://.Only the wasb:// syntax is supported in HDInsight cluster version 3.0. La sintassi asv:// precedente è supportata nei cluster HDInsight 2.1 e 1.6, ma non è supportata nei cluster HDInsight 3.0 e non sarà supportata nelle versioni successive.The older asv:// syntax is supported in HDInsight 2.1 and 1.6 clusters, but it is not supported in HDInsight 3.0 clusters.

Il percorso wasb:// è un percorso virtuale.The wasb:// path is a virtual path. Per altre informazioni, vedere Usare l'archivio BLOB di Azure con HDInsight.For more information see Use Azure Blob storage with HDInsight.

È possibile accedere da HDInsight a un file archiviato nel contenitore del file system predefinito usando uno degli URI seguenti (in questo esempio si userà workflow.xml):A file that is stored in the default file system container can be accessed from HDInsight by using any of the following URIs (I am using workflow.xml as an example):

wasb://mycontainer@mystorageaccount.blob.core.windows.net/tutorials/useoozie/workflow.xml
wasb:///tutorials/useoozie/workflow.xml
/tutorials/useoozie/workflow.xml

Per accedere al file direttamente dall'account di archiviazione, il nome del BLOB per questo file è:If you want to access the file directly from the storage account, the blob name for the file is:

tutorials/useoozie/workflow.xml

Informazioni sulle tabelle interne ed esterne di HiveUnderstand Hive internal and external tables

Relativamente alle tabelle interne ed esterne di Hive è importante conoscere alcune informazioni:There are a few things you need to know about Hive internal and external tables:

  • Il comando CREATE TABLE consente di creare una tabella interna, nota anche come tabella gestita.The CREATE TABLE command creates an internal table, also known as a managed table. Il file di dati deve trovarsi nel contenitore predefinito.The data file must be located in the default container.
  • Il comando CREATE TABLE consente di spostare il file di dati nella cartella /hive/warehouse/ del contenitore predefinito.The CREATE TABLE command moves the data file to the /hive/warehouse/ folder in the default container.
  • Il comando CREATE EXTERNAL TABLE consente di creare una tabella esterna.The CREATE EXTERNAL TABLE command creates an external table. Il file di dati può trovarsi all'esterno del contenitore predefinito.The data file can be located outside the default container.
  • Il comando CREATE EXTERNAL TABLE non consente di spostare il file di dati.The CREATE EXTERNAL TABLE command does not move the data file.
  • Il comando CREATE EXTERNAL TABLE non consente di creare sottocartelle nella cartella specificata nella clausola LOCATION.The CREATE EXTERNAL TABLE command doesn't allow any subfolders under the folder that is specified in the LOCATION clause. È per questo motivo che nell'esercitazione si esegue una copia del file sample.log.This is the reason why the tutorial makes a copy of the sample.log file.

Per altre informazioni, vedere HDInsight: Hive Internal and External Tables Intro (HDInsight: introduzione alle tabelle Hive interne ed esterne).For more information, see HDInsight: Hive Internal and External Tables Intro.

Operazioni preliminari all'esercitazioneTo prepare the tutorial

  1. Aprire Windows PowerShell ISE. A questo scopo, nella schermata Start di Windows 8 digitare PowerShell_ISE e quindi fare clic su Windows PowerShell ISE.Open the Windows PowerShell ISE (in the Windows 8 Start screen, type PowerShell_ISE, and then click Windows PowerShell ISE. Per altre informazioni, vedere Start Windows PowerShell on Windows 8 and Windows (Avviare Windows PowerShell in Windows 8 e Windows).For more information, see Start Windows PowerShell on Windows 8 and Windows).
  2. Nel riquadro inferiore eseguire questo comando per connettersi alla sottoscrizione di Azure:In the bottom pane, run the following command to connect to your Azure subscription:

    Add-AzureAccount
    

    Verrà richiesto di immettere le credenziali dell'account Azure.You will be prompted to enter your Azure account credentials. Questo metodo, che prevede l'aggiunta di una connessione alla sottoscrizione, scade dopo 12 ore, di conseguenza sarà necessario eseguire nuovamente il cmdlet.This method of adding a subscription connection times out, and after 12 hours, you will have to run the cmdlet again.

    Nota

    Se si dispone di più sottoscrizioni di Azure e non si desidera usare quella predefinita, eseguire il cmdlet Select-AzureSubscription per selezionare una sottoscrizione.If you have multiple Azure subscriptions and the default subscription is not the one you want to use, use the Select-AzureSubscription cmdlet to select a subscription.

  3. Copiare lo script seguente nel riquadro di script e impostare le prime sei variabili:Copy the following script into the script pane, and then set the first six variables:

    # WASB variables
    $storageAccountName = "<StorageAccountName>"
    $containerName = "<BlobStorageContainerName>"
    
    # SQL database variables
    $sqlDatabaseServer = "<SQLDatabaseServerName>"
    $sqlDatabaseLogin = "<SQLDatabaseLoginName>"
    $sqlDatabaseLoginPassword = "SQLDatabaseLoginPassword>"
    $sqlDatabaseName = "<SQLDatabaseName>"
    $sqlDatabaseTableName = "log4jLogsCount"
    
    # Oozie files for the tutorial
    $hiveQLScript = "C:\Tutorials\UseOozie\useooziewf.hql"
    $workflowDefinition = "C:\Tutorials\UseOozie\workflow.xml"
    $coordDefinition =  "C:\Tutorials\UseOozie\coordinator.xml"
    
    # WASB folder for storing the Oozie tutorial files.
    $destFolder = "tutorials/useoozie"  # Do NOT use the long path here
    

    Per altre descrizioni di queste variabili, vedere la sezione Prerequisiti di questa esercitazione.For more descriptions of the variables, see the Prerequisites section in this tutorial.

  4. Aggiungere il codice seguente allo script nel relativo riquadro:Append the following to the script in the script pane:

    # Create a storage context object
    $storageaccountkey = get-azurestoragekey $storageAccountName | %{$_.Primary}
    $destContext = New-AzureStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $storageaccountkey
    
    function uploadOozieFiles()
    {
        Write-Host "Copy HiveQL script, workflow definition and coordinator definition ..." -ForegroundColor Green
        Set-AzureStorageBlobContent -File $hiveQLScript -Container $containerName -Blob "$destFolder/useooziewf.hql" -Context $destContext
        Set-AzureStorageBlobContent -File $workflowDefinition -Container $containerName -Blob "$destFolder/workflow.xml" -Context $destContext
        Set-AzureStorageBlobContent -File $coordDefinition -Container $containerName -Blob "$destFolder/coordinator.xml" -Context $destContext
    }
    
    function prepareHiveDataFile()
    {
        Write-Host "Make a copy of the sample.log file ... " -ForegroundColor Green
        Start-CopyAzureStorageBlob -SrcContainer $containerName -SrcBlob "example/data/sample.log" -Context $destContext -DestContainer $containerName -destBlob "$destFolder/data/sample.log" -DestContext $destContext
    }
    
    function prepareSQLDatabase()
    {
        # SQL query string for creating log4jLogsCount table
        $cmdCreateLog4jCountTable = " CREATE TABLE [dbo].[$sqlDatabaseTableName](
                [Level] [nvarchar](10) NOT NULL,
                [Total] float,
            CONSTRAINT [PK_$sqlDatabaseTableName] PRIMARY KEY CLUSTERED
            (
            [Level] ASC
            )
            )"
    
        #Create the log4jLogsCount table
        Write-Host "Create Log4jLogsCount table ..." -ForegroundColor Green
        $conn = New-Object System.Data.SqlClient.SqlConnection
        $conn.ConnectionString = "Data Source=$sqlDatabaseServer.database.windows.net;Initial Catalog=$sqlDatabaseName;User ID=$sqlDatabaseLogin;Password=$sqlDatabaseLoginPassword;Encrypt=true;Trusted_Connection=false;"
        $conn.open()
        $cmd = New-Object System.Data.SqlClient.SqlCommand
        $cmd.connection = $conn
        $cmd.commandtext = $cmdCreateLog4jCountTable
        $cmd.executenonquery()
    
        $conn.close()
    }
    
    # upload workflow.xml, coordinator.xml, and ooziewf.hql
    uploadOozieFiles;
    
    # make a copy of example/data/sample.log to example/data/log4j/sample.log
    prepareHiveDataFile;
    
    # create log4jlogsCount table on SQL database
    prepareSQLDatabase;
    
  5. Fare clic su Esegui script o premere F5 per eseguire lo script.Click Run Script or press F5 to run the script. L'output sarà analogo al seguente:The output will be similar to:

    Output delle operazioni preliminari all'esercitazione

Eseguire il progetto OozieRun the Oozie project

Attualmente Azure PowerShell non fornisce alcun cmdlet per la definizione dei processi Oozie.Azure PowerShell currently doesn't provide any cmdlets for defining Oozie jobs. È possibile usare il cmdlet Invoke-RestMethod per richiamare i servizi Web di Oozie.You can use the Invoke-RestMethod cmdlet to invoke Oozie web services. L'API dei servizi Web di Oozie è una API HTTP REST JSON.The Oozie web services API is a HTTP REST JSON API. Per altre informazioni sull'API dei servizi Web di Oozie, vedere la documentazione di Apache Oozie 4.0 (per cluster HDInsight versione 3.0) o la documentazione di Apache Oozie 3.3.2 (per cluster HDInsight versione 2.1).For more information about the Oozie web services API, see Apache Oozie 4.0 documentation (for HDInsight cluster version 3.0) or Apache Oozie 3.3.2 documentation (for HDInsight cluster version 2.1).

Per inviare un processo OozieTo submit an Oozie job

  1. Aprire Windows PowerShell ISE. A questo scopo, nella schermata Start di Windows 8 digitare PowerShell_ISE e quindi fare clic su Windows PowerShell ISE.Open the Windows PowerShell ISE (in Windows 8 Start screen, type PowerShell_ISE, and then click Windows PowerShell ISE. Per altre informazioni, vedere Start Windows PowerShell on Windows 8 and Windows (Avviare Windows PowerShell in Windows 8 e Windows).For more information, see Start Windows PowerShell on Windows 8 and Windows).
  2. Copiare lo script seguente nel riquadro di script e impostare le prime 14 variabili (ignorare $storageUri).Copy the following script into the script pane, and then set the first fourteen variables (however, skip $storageUri).

    #HDInsight cluster variables
    $clusterName = "<HDInsightClusterName>"
    $clusterUsername = "<HDInsightClusterUsername>"
    $clusterPassword = "<HDInsightClusterUserPassword>"
    
    #Azure Blob storage (WASB) variables
    $storageAccountName = "<StorageAccountName>"
    $storageContainerName = "<BlobContainerName>"
    $storageUri="wasb://$storageContainerName@$storageAccountName.blob.core.windows.net"
    
    #Azure SQL database variables
    $sqlDatabaseServer = "<SQLDatabaseServerName>"
    $sqlDatabaseLogin = "<SQLDatabaseLoginName>"
    $sqlDatabaseLoginPassword = "<SQLDatabaseloginPassword>"
    $sqlDatabaseName = "<SQLDatabaseName>"
    
    #Oozie WF/coordinator variables
    $coordStart = "2014-03-21T13:45Z"
    $coordEnd = "2014-03-21T13:45Z"
    $coordFrequency = "1440"    # in minutes, 24h x 60m = 1440m
    $coordTimezone = "UTC"    #UTC/GMT
    
    $oozieWFPath="$storageUri/tutorials/useoozie"  # The default name is workflow.xml. And you don't need to specify the file name.
    $waitTimeBetweenOozieJobStatusCheck=10
    
    #Hive action variables
    $hiveScript = "$storageUri/tutorials/useoozie/useooziewf.hql"
    $hiveTableName = "log4jlogs"
    $hiveDataFolder = "$storageUri/tutorials/useoozie/data"
    $hiveOutputFolder = "$storageUri/tutorials/useoozie/output"
    
    #Sqoop action variables
    $sqlDatabaseConnectionString = "Data Source=$sqlDatabaseServer.database.windows.net;user=$sqlDatabaseLogin@$sqlDatabaseServer;password=$sqlDatabaseLoginPassword;database=$sqlDatabaseName"  
    $sqlDatabaseTableName = "log4jLogsCount"
    
    $passwd = ConvertTo-SecureString $clusterPassword -AsPlainText -Force
    $creds = New-Object System.Management.Automation.PSCredential ($clusterUsername, $passwd)
    

    Per altre descrizioni di queste variabili, vedere la sezione Prerequisiti di questa esercitazione.For more descriptions of the variables, see the Prerequisites section in this tutorial.

    $coordstart e $coordend indicano l'ora di inizio e di fine del flusso di lavoro.$coordstart and $coordend are the workflow starting and ending time. Per individuare l'ora UTC/GMT, cercare "ora utc" in bing.com. Il valore di $coordFrequency corrisponde alla frequenza in minuti in base alla quale si vuole eseguire il flusso di lavoro.To find out the UTC/GMT time, search "utc time" on bing.com. The $coordFrequency is how often in minutes you want to run the workflow.

  3. Aggiungere il codice seguente allo script.Append the following to the script. Questa parte definisce il payload di Oozie:This part defines the Oozie payload:

    #OoziePayload used for Oozie web service submission
    $OoziePayload =  @"
    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
    
        <property>
            <name>nameNode</name>
            <value>$storageUrI</value>
        </property>
    
        <property>
            <name>jobTracker</name>
            <value>jobtrackerhost:9010</value>
        </property>
    
        <property>
            <name>queueName</name>
            <value>default</value>
        </property>
    
        <property>
            <name>oozie.use.system.libpath</name>
            <value>true</value>
        </property>
    
        <property>
            <name>oozie.coord.application.path</name>
            <value>$oozieWFPath</value>
        </property>
    
        <property>
            <name>wfPath</name>
            <value>$oozieWFPath</value>
        </property>
    
        <property>
            <name>coordStart</name>
            <value>$coordStart</value>
        </property>
    
        <property>
            <name>coordEnd</name>
            <value>$coordEnd</value>
        </property>
    
        <property>
            <name>coordFrequency</name>
            <value>$coordFrequency</value>
        </property>
    
        <property>
            <name>coordTimezone</name>
            <value>$coordTimezone</value>
        </property>
    
        <property>
            <name>hiveScript</name>
            <value>$hiveScript</value>
        </property>
    
        <property>
            <name>hiveTableName</name>
            <value>$hiveTableName</value>
        </property>
    
        <property>
            <name>hiveDataFolder</name>
            <value>$hiveDataFolder</value>
        </property>
    
        <property>
            <name>hiveOutputFolder</name>
            <value>$hiveOutputFolder</value>
        </property>
    
        <property>
            <name>sqlDatabaseConnectionString</name>
            <value>&quot;$sqlDatabaseConnectionString&quot;</value>
        </property>
    
        <property>
            <name>sqlDatabaseTableName</name>
            <value>$SQLDatabaseTableName</value>
        </property>
    
        <property>
            <name>user.name</name>
            <value>admin</value>
        </property>
    
    </configuration>
    "@
    

    Nota

    La differenza principale rispetto al file di payload di invio del flusso di lavoro è la variabile oozie.coord.application.path.The major difference compared to the workflow submission payload file is the variable oozie.coord.application.path. Quando si invia un processo del flusso di lavoro si usa invece la variabile oozie.wf.application.path .When you submit a workflow job, you use oozie.wf.application.path instead.

  4. Aggiungere il codice seguente allo script.Append the following to the script. Questa parte consente di verificare lo stato del servizio Web Oozie:This part checks the Oozie web service status:

    function checkOozieServerStatus()
    {
        Write-Host "Checking Oozie server status..." -ForegroundColor Green
        $clusterUriStatus = "https://$clusterName.azurehdinsight.net:443/oozie/v2/admin/status"
        $response = Invoke-RestMethod -Method Get -Uri $clusterUriStatus -Credential $creds -OutVariable $OozieServerStatus
    
        $jsonResponse = ConvertFrom-Json (ConvertTo-Json -InputObject $response)
        $oozieServerSatus = $jsonResponse[0].("systemMode")
        Write-Host "Oozie server status is $oozieServerSatus..."
    
        if($oozieServerSatus -notmatch "NORMAL")
        {
            Write-Host "Oozie server status is $oozieServerSatus...cannot submit Oozie jobs. Check the server status and re-run the job."
        }
    }
    
  5. Aggiungere il codice seguente allo script.Append the following to the script. Questa parte consente di creare un processo Oozie:This part creates an Oozie job:

    function createOozieJob()
    {
        # create Oozie job
        Write-Host "Sending the following Payload to the cluster:" -ForegroundColor Green
        Write-Host "`n--------`n$OoziePayload`n--------"
        $clusterUriCreateJob = "https://$clusterName.azurehdinsight.net:443/oozie/v2/jobs"
        $response = Invoke-RestMethod -Method Post -Uri $clusterUriCreateJob -Credential $creds -Body $OoziePayload -ContentType "application/xml" -OutVariable $OozieJobName -debug -Verbose
    
        $jsonResponse = ConvertFrom-Json (ConvertTo-Json -InputObject $response)
        $oozieJobId = $jsonResponse[0].("id")
        Write-Host "Oozie job id is $oozieJobId..."
    
        return $oozieJobId
    }
    

    Nota

    Quando si invia un processo del flusso di lavoro, è necessario creare un'altra chiamata del servizio Web per avviare il processo dopo che questo è stato creato.When you submit a workflow job, you must make another web service call to start the job after the job is created. In tal caso, il processo del coordinatore viene attivato dal tempo.In this case, the coordinator job is triggered by time. Il processo verrà avviato automaticamente.The job will start automatically.

  6. Aggiungere il codice seguente allo script.Append the following to the script. Questa parte consente di verificare lo stato del processo Oozie:This part checks the Oozie job status:

    function checkOozieJobStatus($oozieJobId)
    {
        # get job status
        Write-Host "Sleeping for $waitTimeBetweenOozieJobStatusCheck seconds until the job metadata is populated in the Oozie metastore..." -ForegroundColor Green
        Start-Sleep -Seconds $waitTimeBetweenOozieJobStatusCheck
    
        Write-Host "Getting job status and waiting for the job to complete..." -ForegroundColor Green
        $clusterUriGetJobStatus = "https://$clusterName.azurehdinsight.net:443/oozie/v2/job/" + $oozieJobId + "?show=info"
        $response = Invoke-RestMethod -Method Get -Uri $clusterUriGetJobStatus -Credential $creds
        $jsonResponse = ConvertFrom-Json (ConvertTo-Json -InputObject $response)
        $JobStatus = $jsonResponse[0].("status")
    
        while($JobStatus -notmatch "SUCCEEDED|KILLED")
        {
            Write-Host "$(Get-Date -format 'G'): $oozieJobId is in $JobStatus state...waiting $waitTimeBetweenOozieJobStatusCheck seconds for the job to complete..."
            Start-Sleep -Seconds $waitTimeBetweenOozieJobStatusCheck
            $response = Invoke-RestMethod -Method Get -Uri $clusterUriGetJobStatus -Credential $creds
            $jsonResponse = ConvertFrom-Json (ConvertTo-Json -InputObject $response)
            $JobStatus = $jsonResponse[0].("status")
        }
    
        Write-Host "$(Get-Date -format 'G'): $oozieJobId is in $JobStatus state!"
        if($JobStatus -notmatch "SUCCEEDED")
        {
            Write-Host "Check logs at http://headnode0:9014/cluster for detais."
        }
    }
    
  7. (Facoltativo) Aggiungere il codice seguente allo script.(Optional) Append the following to the script.

    function listOozieJobs()
    {
        Write-Host "Listing Oozie jobs..." -ForegroundColor Green
        $clusterUriStatus = "https://$clusterName.azurehdinsight.net:443/oozie/v2/jobs"
        $response = Invoke-RestMethod -Method Get -Uri $clusterUriStatus -Credential $creds
    
        write-host "Job ID                                   App Name        Status      Started                         Ended"
        write-host "----------------------------------------------------------------------------------------------------------------------------------"
        foreach($job in $response.workflows)
        {
            Write-Host $job.id "`t" $job.appName "`t" $job.status "`t" $job.startTime "`t" $job.endTime
        }
    }
    
    function ShowOozieJobLog($oozieJobId)
    {
        Write-Host "Showing Oozie job info..." -ForegroundColor Green
        $clusterUriStatus = "https://$clusterName.azurehdinsight.net:443/oozie/v2/job/$oozieJobId" + "?show=log"
        $response = Invoke-RestMethod -Method Get -Uri $clusterUriStatus -Credential $creds
        write-host $response
    }
    
    function killOozieJob($oozieJobId)
    {
        Write-Host "Killing the Oozie job $oozieJobId..." -ForegroundColor Green
        $clusterUriStartJob = "https://$clusterName.azurehdinsight.net:443/oozie/v2/job/" + $oozieJobId + "?action=kill" #Valid values for the 'action' parameter are 'start', 'suspend', 'resume', 'kill', 'dryrun', 'rerun', and 'change'.
        $response = Invoke-RestMethod -Method Put -Uri $clusterUriStartJob -Credential $creds | Format-Table -HideTableHeaders -debug
    }
    
  8. Aggiungere il codice seguente allo script:Append the following to the script:

    checkOozieServerStatus
    # listOozieJobs
    $oozieJobId = createOozieJob($oozieJobId)
    checkOozieJobStatus($oozieJobId)
    # ShowOozieJobLog($oozieJobId)
    # killOozieJob($oozieJobId)
    

Rimuovere i segni # se si desidera eseguire le funzioni aggiuntive.Remove the # signs if you want to run the additional functions.

  1. Se si usa la versione 2.1 del cluster HDinsight, sostituire "https://$clusterName.azurehdinsight.net:443/oozie/v2/" con "https://$clusterName.azurehdinsight.net:443/oozie/v1/".If your HDinsight cluster is version 2.1, replace "https://$clusterName.azurehdinsight.net:443/oozie/v2/" with "https://$clusterName.azurehdinsight.net:443/oozie/v1/". La versione 2.1 del cluster HDInsight non supporta la versione 2 dei servizi Web.HDInsight cluster version 2.1 does not supports version 2 of the web services.
  2. Fare clic su Esegui script o premere F5 per eseguire lo script.Click Run Script or press F5 to run the script. L'output sarà analogo al seguente:The output will be similar to:

    Output dell'esecuzione del flusso di lavoro nell'esercitazione

  3. Connettersi al database SQL per visualizzare i dati esportati.Connect to your SQL Database to see the exported data.

Per verificare il log degli errori del processoTo check the job error log

Per risolvere i problemi relativi a un flusso di lavoro, consultare il file di log di Oozie in C:\apps\dist\oozie-3.3.2.1.3.2.0-05\oozie-win-distro\logs\Oozie.log dal nodo head del cluster.To troubleshoot a workflow, the Oozie log file can be found at C:\apps\dist\oozie-3.3.2.1.3.2.0-05\oozie-win-distro\logs\Oozie.log from the cluster headnode. Per informazioni su RDP vedere l'articolo su come amministrare cluster HDInsight con il portale di Azure.For information on RDP, see Administering HDInsight clusters using the Azure portal.

Per ripetere l'esecuzione dell'esercitazioneTo rerun the tutorial

Per eseguire nuovamente il flusso di lavoro sarà necessario eseguire i passaggi seguenti:To rerun the workflow, you must perform the following tasks:

  • Eliminare il file di output dello script Hive.Delete the Hive script output file.
  • Eliminare i dati nella tabella log4jLogsCount.Delete the data in the log4jLogsCount table.

Di seguito è riportato un esempio di script di Windows PowerShell che è possibile usare:Here is a sample Windows PowerShell script that you can use:

$storageAccountName = "<AzureStorageAccountName>"
$containerName = "<ContainerName>"

#SQL database variables
$sqlDatabaseServer = "<SQLDatabaseServerName>"
$sqlDatabaseLogin = "<SQLDatabaseLoginName>"
$sqlDatabaseLoginPassword = "<SQLDatabaseLoginPassword>"
$sqlDatabaseName = "<SQLDatabaseName>"
$sqlDatabaseTableName = "log4jLogsCount"

Write-host "Delete the Hive script output file ..." -ForegroundColor Green
$storageaccountkey = get-azurestoragekey $storageAccountName | %{$_.Primary}
$destContext = New-AzureStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $storageaccountkey
Remove-AzureStorageBlob -Context $destContext -Blob "tutorials/useoozie/output/000000_0" -Container $containerName

Write-host "Delete all the records from the log4jLogsCount table ..." -ForegroundColor Green
$conn = New-Object System.Data.SqlClient.SqlConnection
$conn.ConnectionString = "Data Source=$sqlDatabaseServer.database.windows.net;Initial Catalog=$sqlDatabaseName;User ID=$sqlDatabaseLogin;Password=$sqlDatabaseLoginPassword;Encrypt=true;Trusted_Connection=false;"
$conn.open()
$cmd = New-Object System.Data.SqlClient.SqlCommand
$cmd.connection = $conn
$cmd.commandtext = "delete from $sqlDatabaseTableName"
$cmd.executenonquery()

$conn.close()

Passaggi successiviNext steps

In questa esercitazione si è appreso come definire un flusso di lavoro di Oozie e un coordinatore Oozie e come eseguire un processo del coordinatore Oozie con Azure PowerShell.In this tutorial, you learned how to define an Oozie workflow and an Oozie coordinator, and how to run an Oozie coordinator job by using Azure PowerShell. Per altre informazioni, vedere gli articoli seguenti:To learn more, see the following articles: