Esercitazione: Creare la prima data factory di Azure con Azure PowerShell

In questo articolo viene usato Azure PowerShell per creare la prima data factory di Azure. Per eseguire l'esercitazione usando altri strumenti/SDK, selezionare una delle opzioni dall'elenco a discesa.

La pipeline in questa esercitazione include un'attività, l'attività Hive di HDInsight, che esegue uno script Hive in un cluster Azure HDInsight per trasformare i dati di input e generare i dati di output. L'esecuzione della pipeline è pianificata una volta al mese tra le ore di inizio e di fine specificate.

Nota

La pipeline di dati in questa esercitazione trasforma i dati di input per produrre dati di output. Non copia dati da un archivio dati di origine a un archivio dati di destinazione. Per un'esercitazione su come copiare dati usando Azure Data Factory, vedere Copiare dati da un archivio BLOB al database SQL.

Una pipeline può includere più attività ed è possibile concatenarne due, ovvero eseguire un'attività dopo l'altra, impostando il set di dati di output di un'attività come set di dati di input dell'altra. Per altre informazioni, vedere Pianificazione ed esecuzione in Data Factory.

Prerequisiti

Creare un'istanza di Data Factory

In questo passaggio è possibile usare Azure PowerShell per creare una data factory di Azure denominata FirstDataFactoryPSH. Una data factory può comprendere una o più pipeline. Una pipeline può comprendere una o più attività. Ad esempio, un'attività di copia per copiare dati da un archivio dati di origine a uno di destinazione e un'attività Hive HDInsight per eseguire uno script Hive e trasformare i dati di input. In questo passaggio iniziale viene creata la data factory.

  1. Aprire Azure PowerShell ed eseguire il comando seguente. Mantenere aperto Azure PowerShell fino alla fine dell'esercitazione. Se si chiude e si riapre, sarà necessario eseguire di nuovo questi comandi.
    • Eseguire il comando seguente e immettere il nome utente e la password usati per accedere al portale di Azure. PowerShell Login-AzureRmAccount
    • Eseguire il comando seguente per visualizzare tutte le sottoscrizioni per l'account. PowerShell Get-AzureRmSubscription
    • Eseguire il comando seguente per selezionare la sottoscrizione da usare. La sottoscrizione deve corrispondere a quella usata nel portale di Azure. PowerShell Get-AzureRmSubscription -SubscriptionName <SUBSCRIPTION NAME> | Set-AzureRmContext
  2. Creare un gruppo di risorse di Azure denominato ADFTutorialResourceGroup eseguendo questo comando:

    New-AzureRmResourceGroup -Name ADFTutorialResourceGroup  -Location "West US"
    

    Per alcuni dei passaggi in questa esercitazione si presuppone l'uso del gruppo di risorse denominato ADFTutorialResourceGroup. Se si usa un gruppo di risorse diverso, è necessario usarlo al posto di ADFTutorialResourceGroup in questa esercitazione.

  3. Eseguire il cmdlet New-AzureRmDataFactory che crea una data factory denominata FirstDataFactoryPSH.

    New-AzureRmDataFactory -ResourceGroupName ADFTutorialResourceGroup -Name FirstDataFactoryPSH –Location "West US"
    

    Tenere presente quanto segue:

  • È necessario specificare un nome univoco globale per la Data factory di Azure. Se viene visualizzato l'errore Il nome "FirstDataFactoryPSH" per la data factory non è disponibile, modificare il nome (ad esempio, nomeutenteFirstDataFactoryPSH). Durante l'esecuzione di passaggi in questa esercitazione usare questo nome anziché ADFTutorialFactoryPSH. Per informazioni sulle regole di denominazione per gli elementi di Data factory, vedere l'argomento relativo alle regole di denominazione di Data factory .
  • Per creare istanze di Data Factory, è necessario essere un collaboratore/amministratore della sottoscrizione di Azure.
  • Il nome di Data Factory può essere registrato come un nome DNS in futuro e pertanto divenire visibile pubblicamente.
  • Se viene visualizzato l'errore "La sottoscrizione non è registrata per l'uso dello spazio dei nomi Microsoft.DataFactory", eseguire una di queste operazioni e provare a ripetere la pubblicazione:

    • In Azure PowerShell eseguire questo comando per registrare il provider di Data Factory:

      Register-AzureRmResourceProvider -ProviderNamespace Microsoft.DataFactory
      

      Per verificare che il provider di Data Factory sia registrato è possibile eseguire questo comando:

      Get-AzureRmResourceProvider
      
    • Accedere usando la sottoscrizione di Azure nel portale di Azure e passare al pannello Data Factory oppure creare un'istanza di Data Factory nel portale di Azure. Questa azione registra automaticamente il provider.

Prima di creare una pipeline è necessario creare alcune entità di Data factory. Creare prima di tutto i servizi collegati per collegare archivi dati/servizi di calcolo all'archivio dati, definire i set di dati di input e di output per rappresentare i dati di input/output negli archivi dati collegati e quindi creare la pipeline con un'attività che usa questi set di dati.

Creazione di servizi collegati

In questo passaggio l'account di archiviazione di Azure e un cluster HDInsight su richiesta di Azure vengono collegati alla data factory. In questo esempio l'account di archiviazione di Azure contiene i dati di input e di output per la pipeline. Il servizio HDInsight collegato viene usato per eseguire uno script Hive specificato nell'attività della pipeline in questo esempio. Identificare l'archivio dati/i servizi di calcolo usati nello scenario e collegare tali servizi alla data factory creando servizi collegati.

Creare il servizio collegato Archiviazione di Azure

In questo passaggio l'account di archiviazione di Azure viene collegato alla data factory. Viene usato lo stesso account di archiviazione di Azure per archiviare i dati di input/output e il file di script HQL.

  1. Creare un file JSON denominato StorageLinkedService.json nella cartella C:\ADFGetStarted con il contenuto seguente: Creare la cartella ADFGetStarted, se non esiste già.

    {
        "name": "StorageLinkedService",
        "properties": {
            "type": "AzureStorage",
            "description": "",
            "typeProperties": {
                "connectionString": "DefaultEndpointsProtocol=https;AccountName=<accountname>;AccountKey=<accountkey>"
            }
        }
    }
    

    Sostituire account name con il nome dell'account di archiviazione di Azure e account key con la chiave di accesso dell'account di archiviazione di Azure. Per informazioni su come ottenere la chiave di accesso alle risorse di archiviazione, vedere le informazioni su come visualizzare, copiare e rigenerare le chiavi di accesso alle risorse di archiviazione in Gestire l'account di archiviazione.

  2. In Azure PowerShell passare alla cartella ADFGetStarted.
  3. È possibile usare il cmdlet New-AzureRmDataFactoryLinkedService che crea un servizio collegato. Questo cmdlet e altri cmdlet di Data factory usati in questa esercitazione richiedono il passaggio di valori per i parametri ResourceGroupName e DataFactoryName. In alternativa, è possibile usare Get-AzureRmDataFactory per ottenere un oggetto DataFactory e passarlo senza digitare ResourceGroupName e DataFactoryName ogni volta che si esegue un cmdlet. Eseguire il comando seguente per assegnare l'output del cmdlet Get-AzureRmDataFactory a una variabile $df.

    $df=Get-AzureRmDataFactory -ResourceGroupName ADFTutorialResourceGroup -Name FirstDataFactoryPSH
    
  4. Eseguire quindi il cmdlet New-AzureRmDataFactoryLinkedService che crea il servizio collegato StorageLinkedService.

    New-AzureRmDataFactoryLinkedService $df -File .\StorageLinkedService.json
    

    Se il cmdlet Get-AzureRmDataFactory non è stato eseguito e l'output non è stato assegnato alla variabile $df, sarà necessario specificare i valori per i parametri ResourceGroupName e DataFactoryName come indicato di seguito.

    New-AzureRmDataFactoryLinkedService -ResourceGroupName ADFTutorialResourceGroup -DataFactoryName FirstDataFactoryPSH -File .\StorageLinkedService.json
    

    Se si chiude Azure PowerShell durante l'esercitazione, per completarla è necessario eseguire il cmdlet Get-AzureRmDataFactory al successivo avvio di Azure PowerShell.

Creare un servizio collegato Azure HDInsight

In questo passaggio viene collegato un cluster HDInsight su richiesta alla data factory. Il cluster HDInsight viene creato automaticamente in fase di esecuzione ed eliminato al termine dell'elaborazione, se rimane inattivo per il periodo di tempo specificato. È possibile usare il proprio cluster HDInsight anziché un cluster HDInsight su richiesta. Per informazioni dettagliate, vedere Servizi collegati di calcolo .

  1. Creare un file JSON denominato HDInsightOnDemandLinkedService.json nella cartella C:\ADFGetStarted con il contenuto seguente.

    {
        "name": "HDInsightOnDemandLinkedService",
        "properties": {
            "type": "HDInsightOnDemand",
            "typeProperties": {
                "version": "3.5",
                "clusterSize": 1,
                "timeToLive": "00:05:00",
                "osType": "Linux",
                "linkedServiceName": "StorageLinkedService"
            }
        }
    }
    

    La tabella seguente fornisce le descrizioni delle proprietà JSON usate nel frammento di codice:

    Proprietà Descrizione
    ClusterSize Specifica le dimensioni del cluster HDInsight.
    TimeToLive Specifica il tempo di inattività del cluster HDInsight, prima che sia eliminato.
    linkedServiceName Specifica l'account di archiviazione che viene usato per archiviare i log generati da HDInsight.

    Tenere presente quanto segue:

    • Data Factory crea automaticamente un cluster HDInsight basato su Linux con il codice JSON. Per i dettagli, vedere Servizio collegato Azure HDInsight su richiesta .
    • È possibile usare il proprio cluster HDInsight anziché un cluster HDInsight su richiesta. Per i dettagli, vedere Servizio collegato Azure HDInsight .
    • Il cluster HDInsight crea un contenitore predefinito nell'archivio BLOB specificato nel file JSON (linkedServiceName). HDInsight non elimina il contenitore quando viene eliminato il cluster. Questo comportamento dipende dalla progettazione. Con il servizio collegato HDInsight su richiesta, viene creato un cluster HDInsight ogni volta che viene elaborata una sezione, a meno che non esista un cluster attivo (timeToLive). Il cluster viene eliminato al termine dell'elaborazione.

      Man mano che vengono elaborate più sezioni, vengono visualizzati numerosi contenitori nell'archivio BLOB di Azure. Se non sono necessari per risolvere i problemi relativi ai processi, è possibile eliminarli per ridurre i costi di archiviazione. I nomi dei contenitori seguono questo schema: "adfyourdatafactoryname-linkedservicename-datetimestamp". Per eliminare i contenitori nell'archivio BLOB di Azure, usare strumenti come Microsoft Azure Storage Explorer .

      Per i dettagli, vedere Servizio collegato Azure HDInsight su richiesta .

  2. Eseguire il cmdlet New-AzureRmDataFactoryLinkedService che crea il servizio collegato HDInsightOnDemandLinkedService.

    New-AzureRmDataFactoryLinkedService $df -File .\HDInsightOnDemandLinkedService.json
    

Creare set di dati

In questo passaggio vengono creati set di dati per rappresentare i dati di input e di output per l'elaborazione Hive. I set di dati fanno riferimento all'oggetto StorageLinkedService creato in precedenza in questa esercitazione. Il servizio collegato punta a un account di archiviazione di Azure e i set di dati specificano il contenitore, la cartella e il nome del file nella risorsa di archiviazione che contiene i dati di input e di output.

Creare set di dati di input

  1. Creare un file JSON denominato InputTable.json nella cartella C:\ADFGetStarted con il contenuto seguente:

    {
        "name": "AzureBlobInput",
        "properties": {
            "type": "AzureBlob",
            "linkedServiceName": "StorageLinkedService",
            "typeProperties": {
                "fileName": "input.log",
                "folderPath": "adfgetstarted/inputdata",
                "format": {
                    "type": "TextFormat",
                    "columnDelimiter": ","
                }
            },
            "availability": {
                "frequency": "Month",
                "interval": 1
            },
            "external": true,
            "policy": {}
        }
    }
    

    Il codice JSON definisce un set di dati denominato AzureBlobInput, che rappresenta dati di input per un'attività nella pipeline. Specifica anche che i dati di input si trovano nel contenitore BLOB denominato adfgetstarted e nella cartella denominata inputdata.

    La tabella seguente fornisce le descrizioni delle proprietà JSON usate nel frammento di codice:

    Proprietà Descrizione
    type La proprietà type è impostata su AzureBlob perché i dati si trovano nell'archiviazione BLOB di Azure.
    linkedServiceName Fa riferimento all'oggetto StorageLinkedService creato in precedenza.
    fileName Questa proprietà è facoltativa. Se si omette questa proprietà, vengono prelevati tutti i file da folderPath. In tal caso viene elaborato solo il file input.log.
    type I file di log sono in formato testo, quindi viene usato TextFormat.
    columnDelimiter Le colonne nei file di log sono delimitate da virgola (,).
    frequenza/intervallo La frequenza è impostata su Month e l'intervallo è 1, ciò significa che le sezioni di input sono disponibili con cadenza mensile.
    external Questa proprietà è impostata su true se i dati di input non vengono generati dal servizio Data factory.
  2. Eseguire questo comando in Azure PowerShell per creare il set di dati di Data Factory:

    New-AzureRmDataFactoryDataset $df -File .\InputTable.json
    

Creare il set di dati di output

Viene creato ora il set di dati di output per rappresentare i dati di output archiviati nell'archivio BLOB di Azure.

  1. Creare un file JSON denominato OutputTable.json nella cartella C:\ADFGetStarted con il contenuto seguente:

    {
      "name": "AzureBlobOutput",
      "properties": {
        "type": "AzureBlob",
        "linkedServiceName": "StorageLinkedService",
        "typeProperties": {
          "folderPath": "adfgetstarted/partitioneddata",
          "format": {
            "type": "TextFormat",
            "columnDelimiter": ","
          }
        },
        "availability": {
          "frequency": "Month",
          "interval": 1
        }
      }
    }
    

    Il codice JSON definisce un set di dati denominato AzureBlobOutput, che rappresenta dati di output per un'attività nella pipeline. Specifica anche che i risultati vengono archiviati nel contenitore BLOB denominato adfgetstarted e nella cartella denominata partitioneddata. La sezione availability specifica che il set di dati di output viene generato su base mensile.

  2. Eseguire questo comando in Azure PowerShell per creare il set di dati di Data Factory:

    New-AzureRmDataFactoryDataset $df -File .\OutputTable.json
    

Creare una pipeline

In questo passaggio viene creata la prima pipeline con un'attività HDInsightHive . La sezione di input è disponibile ogni mese (frequency: Month, interval: 1), la sezione di output viene generata ogni mese e anche la proprietà dell'utilità di pianificazione dell'attività è impostata su una frequenza mensile. Le impostazioni per il set di dati di output e l'utilità di pianificazione dell'attività devono corrispondere. In questo momento la pianificazione è basata sul set di dati di output, quindi è necessario creare un set di dati di output anche se l'attività non genera alcun output. Se l'attività non richiede input, è possibile ignorare la creazione del set di dati di input. Le proprietà usate nel codice JSON seguente sono illustrate in fondo a questa sezione.

  1. Creare un file JSON denominato MyFirstPipelinePSH.json nella cartella C:\ADFGetStarted con il contenuto seguente:

    Importante

    Nel codice JSON sostituire storageaccountname con il nome dell'account di archiviazione.

    {
        "name": "MyFirstPipeline",
        "properties": {
            "description": "My first Azure Data Factory pipeline",
            "activities": [
                {
                    "type": "HDInsightHive",
                    "typeProperties": {
                        "scriptPath": "adfgetstarted/script/partitionweblogs.hql",
                        "scriptLinkedService": "StorageLinkedService",
                        "defines": {
                            "inputtable": "wasb://adfgetstarted@<storageaccountname>.blob.core.windows.net/inputdata",
                            "partitionedtable": "wasb://adfgetstarted@<storageaccountname>.blob.core.windows.net/partitioneddata"
                        }
                    },
                    "inputs": [
                        {
                            "name": "AzureBlobInput"
                        }
                    ],
                    "outputs": [
                        {
                            "name": "AzureBlobOutput"
                        }
                    ],
                    "policy": {
                        "concurrency": 1,
                        "retry": 3
                    },
                    "scheduler": {
                        "frequency": "Month",
                        "interval": 1
                    },
                    "name": "RunSampleHiveActivity",
                    "linkedServiceName": "HDInsightOnDemandLinkedService"
                }
            ],
            "start": "2017-07-01T00:00:00Z",
            "end": "2017-07-02T00:00:00Z",
            "isPaused": false
        }
    }
    

    Nel frammento di codice JSON si crea una pipeline costituita da una singola attività che usa Hive per elaborare i dati in un cluster HDInsight.

    Il file di script Hive, partitionweblogs.hql, è archiviato nell'account di archiviazione di Azure (specificato da scriptLinkedService, denominato StorageLinkedService) e nella cartella script nel contenitore adfgetstarted.

    La sezione defines è usata per specificare le impostazioni di runtime che vengono passate allo script Hive come valori di configurazione Hive, ad esempio, ${hiveconf:inputtable}, ${hiveconf:partitionedtable}.

    Le proprietà start ed end della pipeline ne specificano il periodo attivo.

    Nel codice JSON dell'attività si specifica che lo script Hive viene eseguito sulla risorsa di calcolo specificata da linkedServiceName - HDInsightOnDemandLinkedService.

    Nota

    Per informazioni dettagliate sulle proprietà JSON usate nell'esempio, vedere la sezione "Pipeline JSON" in Pipeline e attività in Azure Data Factory.

  2. Verificare che il file input.log si trovi nella cartella adfgetstarted/inputdata nell'archivio BLOB di Azure ed eseguire il comando seguente per distribuire la pipeline. Dal momento che gli orari di inizio e fine sono impostati nel passato e isPaused è impostato su false, la pipeline (l'attività nella pipeline) viene eseguita immediatamente dopo la distribuzione.

    New-AzureRmDataFactoryPipeline $df -File .\MyFirstPipelinePSH.json
    
  3. La creazione della prima pipeline tramite Azure PowerShell è così completata.

Monitorare la pipeline

In questo passaggio viene usato Azure PowerShell per monitorare le attività in un'istanza di Azure Data Factory.

  1. Eseguire Get-AzureRmDataFactory e assegnare l'output a una variabile $df.

    $df=Get-AzureRmDataFactory -ResourceGroupName ADFTutorialResourceGroup -Name FirstDataFactoryPSH
    
  2. Eseguire Get-AzureRmDataFactorySlice per ottenere dettagli su tutte le sezioni di EmpSQLTable, ovvero la tabella di output della pipeline.

    Get-AzureRmDataFactorySlice $df -DatasetName AzureBlobOutput -StartDateTime 2017-07-01
    

    Si noti che il valore di StartDateTime specificato qui corrisponde all'ora di inizio specificata nel codice JSON della pipeline. Di seguito è riportato l'output di esempio:

    ResourceGroupName : ADFTutorialResourceGroup
    DataFactoryName   : FirstDataFactoryPSH
    DatasetName       : AzureBlobOutput
    Start             : 7/1/2017 12:00:00 AM
    End               : 7/2/2017 12:00:00 AM
    RetryCount        : 0
    State             : InProgress
    SubState          :
    LatencyStatus     :
    LongRetryCount    : 0
    
  3. Eseguire Get-AzureRmDataFactoryRun per ottenere i dettagli delle esecuzioni di attività per una sezione specifica.

    Get-AzureRmDataFactoryRun $df -DatasetName AzureBlobOutput -StartDateTime 2017-07-01
    

    Di seguito è riportato l'output di esempio:

    Id                  : 0f6334f2-d56c-4d48-b427-d4f0fb4ef883_635268096000000000_635292288000000000_AzureBlobOutput
    ResourceGroupName   : ADFTutorialResourceGroup
    DataFactoryName     : FirstDataFactoryPSH
    DatasetName         : AzureBlobOutput
    ProcessingStartTime : 12/18/2015 4:50:33 AM
    ProcessingEndTime   : 12/31/9999 11:59:59 PM
    PercentComplete     : 0
    DataSliceStart      : 7/1/2017 12:00:00 AM
    DataSliceEnd        : 7/2/2017 12:00:00 AM
    Status              : AllocatingResources
    Timestamp           : 12/18/2015 4:50:33 AM
    RetryAttempt        : 0
    Properties          : {}
    ErrorMessage        :
    ActivityName        : RunSampleHiveActivity
    PipelineName        : MyFirstPipeline
    Type                : Script
    

    È possibile continuare a eseguire questo cmdlet fino a quando la sezione non passa allo stato Pronto oppure Operazione non riuscita. Quando lo stato della sezione è Pronto, cercare i dati di output nella cartella partitioneddata del contenitore adfgetstarted nell'archivio BLOB. La creazione di un cluster HDInsight su richiesta di solito richiede tempo.

    Dati di output

Importante

La creazione di un cluster HDInsight su richiesta di solito richiede tempo (circa 20 minuti). Di conseguenza, prevedere circa 30 minuti per l'elaborazione della sezione nella pipeline.

Il file di input viene eliminato quando la sezione viene elaborata correttamente. Per eseguire di nuovo la sezione o ripetere l'esercitazione, caricare quindi il file di input (input.log) nella cartella inputdata del contenitore adfgetstarted.

Riepilogo

In questa esercitazione è stata creata un'istanza di Azure Data Factory per elaborare i dati eseguendo lo script Hive in un cluster Hadoop di HDInsight. È stato usato l'editor di Data Factory nel portale di Azure per eseguire questa procedura:

  1. Creare un'istanza di Azure Data Factory.
  2. Creare due servizi collegati:
    1. Archiviazione di Azure per collegare l'archivio BLOB di Azure che contiene i file di input/output alla data factory.
    2. Azure HDInsight per collegare un cluster Hadoop di HDInsight alla data factory. Azure Data Factory crea un cluster Hadoop di HDInsight JIT per elaborare i dati di input e generare i dati di output.
  3. Creare due set di datiche descrivono i dati di input e di output per l'attività Hive di HDInsight nella pipeline.
  4. Creare una pipeline con un'attività Hive di HDInsight.

Passaggi successivi

In questo articolo è stata creata una pipeline con un'attività di trasformazione (attività HDInsight) che esegue uno script Hive in un cluster HDInsight su richiesta di Azure. Per informazioni su come usare un'attività di copia per copiare i dati da un BLOB di Azure ad Azure SQL, vedere Esercitazione: Copiare i dati di un BLOB di Azure in Azure SQL.

Vedere anche

Argomento Descrizione
Informazioni di riferimento sui cmdlet di Data factory Vedere la documentazione completa sui cmdlet di Data factory
Pipeline Questo articolo fornisce informazioni sulle pipeline e sulle attività in Azure Data Factory e su come usarle per costruire flussi di lavoro end-to-end basati sui dati per lo scenario o l'azienda.
Set di dati Questo articolo fornisce informazioni sui set di dati in Azure Data Factory.
Pianificazione ed esecuzione Questo articolo descrive gli aspetti di pianificazione ed esecuzione del modello applicativo di Data factory di Azure.
Monitorare e gestire le pipeline con l'app di monitoraggio Questo articolo descrive come monitorare, gestire ed eseguire il debug delle pipeline usando l'app di monitoraggio e gestione.