Creare cluster Hadoop on demand in HDInsight con Azure Data FactoryCreate on-demand Hadoop clusters in HDInsight using Azure Data Factory

Azure Data Factory è un servizio di integrazione delle informazioni basato sul cloud che consente di automatizzare lo spostamento e la trasformazione dei dati.Azure Data Factory is a cloud-based data integration service that orchestrates and automates the movement and transformation of data. È possibile creare un cluster Hadoop di HDInsight JIT per elaborare una sezione dati di input ed eliminare il cluster al termine dell'elaborazione.It can create a HDInsight Hadoop cluster just-in-time to process an input data slice and delete the cluster when the processing is complete. Ecco alcuni dei vantaggi offerti dall'uso di un cluster Hadoop di HDInsight su richiesta:Some of the benefits of using an on-demand HDInsight Hadoop cluster are:

  • Si paga solo per il tempo in cui il processo è in esecuzione nel cluster Hadoop di HDInsight, più un breve tempo di inattività configurabile.You only pay for the time job is running on the HDInsight Hadoop cluster (plus a brief configurable idle time). La fatturazione dei cluster HDInsight viene calcolata al minuto, indipendentemente dal fatto che siano in uso o meno.The billing for HDInsight clusters is pro-rated per minute, whether you are using them or not. Quando si usa un servizio collegato HDInsight su richiesta in Data Factory, i cluster vengono creati su richiesta.When you use an on-demand HDInsight linked service in Data Factory, the clusters are created on-demand. I cluster vengono eliminati automaticamente quando i processi vengono completati.And the clusters are deleted automatically when the jobs are completed. Di conseguenza, si paga solo per il tempo di esecuzione del processo e il breve tempo di inattività (impostazione timeToLive).Therefore, you only pay for the job running time and the brief idle time (time-to-live setting).
  • È possibile creare un flusso di lavoro usando una pipeline di Data Factory.You can create a workflow using a Data Factory pipeline. Ad esempio, è possibile usare la pipeline per copiare dati da un'istanza locale di SQL Server a un archivio BLOB di Azure, elaborare i dati eseguendo uno script Hive e uno script Pig in un cluster Hadoop di HDInsight su richiestaFor example, you can have the pipeline to copy data from an on-premises SQL Server to an Azure blob storage, process the data by running a Hive script and a Pig script on an on-demand HDInsight Hadoop cluster. e quindi copiare i dati dei risultati in Azure SQL Data Warehouse perché vengano utilizzati da applicazioni di business intelligence.Then, copy the result data to an Azure SQL Data Warehouse for BI applications to consume.
  • È possibile pianificare l'esecuzione periodica (oraria, giornaliera, settimanale, mensile e così via) del flusso di lavoro.You can schedule the workflow to run periodically (hourly, daily, weekly, monthly, etc.).

In Azure Data Factory, una data factory può includere una o più pipeline di dati.In Azure Data Factory, a data factory can have one or more data pipelines. Una pipeline di dati include una o più attività.A data pipeline has one or more activities. Esistono due tipi di attività: attività di spostamento dei dati e attività di trasformazione dei dati.There are two types of activities: Data Movement Activities and Data Transformation Activities. Le attività di spostamento dei dati (che attualmente includono solo l'attività di copia) vengono usate per spostare dati da un archivio dati di origine a un archivio dati di destinazione.You use data movement activities (currently, only Copy Activity) to move data from a source data store to a destination data store. Le attività di trasformazione dei dati vengono usate per trasformare/elaborare i dati.You use data transformation activities to transform/process data. L'attività Hive di HDInsight è una delle attività di trasformazione supportate da Data Factory.HDInsight Hive Activity is one of the transformation activities supported by Data Factory. L'attività di trasformazione Hive verrà usata in questa esercitazione.You use the Hive transformation activity in this tutorial.

È possibile configurare un'attività Hive in modo da usare il cluster Hadoop di HDInsight dell'utente oppure un cluster Hadoop di HDInsight su richiesta.You can configure a hive activity to use your own HDInsight Hadoop cluster or an on-demand HDInsight Hadoop cluster. In questa esercitazione, l'attività Hive nella pipeline della data factory viene configurata per usare un cluster HDInsight su richiesta.In this tutorial, the Hive activity in the data factory pipeline is configured to use an on-demand HDInsight cluster. Ecco quindi cosa accade quando l'attività viene eseguita per elaborare una sezione dati:Therefore, when the activity runs to process a data slice, here is what happens:

  1. Viene creato automaticamente un cluster Hadoop di HDInsight JIT per elaborare la sezione.A HDInsight Hadoop cluster is automatically created for you just-in-time to process the slice.
  2. I dati di input vengono elaborati eseguendo uno script HiveQL nel cluster.The input data is processed by running a HiveQL script on the cluster.
  3. Il cluster Hadoop di HDInsight viene eliminato al termine dell'elaborazione ed è inattivo per l'intervallo di tempo configurato (impostazione timeToLive).The HDInsight Hadoop cluster is deleted after the processing is complete and the cluster is idle for the configured amount of time (timeToLive setting). Se la sezione dati successiva è disponibile per l'elaborazione entro il tempo di inattività di timeToLive, per l'elaborazione della sezione viene usato lo stesso cluster.If the next data slice is available for processing with in this timeToLive idle time, the same cluster is used to process the slice.

In questa esercitazione, lo script HiveQL associato all'attività Hive esegue queste azioni:In this tutorial, the HiveQL script associated with the hive activity performs the following actions:

  1. Crea una tabella esterna che fa riferimento ai dati di blog non elaborati contenuti in un archivio BLOB di Azure.Creates an external table that references the raw web log data stored in an Azure Blob storage.
  2. Partiziona i dati non elaborati per anno e per mese.Partitions the raw data by year and month.
  3. Archivia i dati partizionati nell'archivio BLOB di Azure.Stores the partitioned data in the Azure blob storage.

In questa esercitazione, lo script HiveQL associato all'attività Hive crea una tabella esterna che fa riferimento ai dati di blog non elaborati contenuti nell'archivio BLOB di Azure.In this tutorial, the HiveQL script associated with the hive activity creates an external table that references the raw web log data stored in the Azure Blob Storage. Ecco le righe di esempio per ogni mese nel file di input.Here are the sample rows for each month in the input file.

2014-01-01,02:01:09,SAMPLEWEBSITE,GET,/blogposts/mvc4/step2.png,X-ARR-LOG-ID=2ec4b8ad-3cf0-4442-93ab-837317ece6a1,80,-,1.54.23.196,Mozilla/5.0+(Windows+NT+6.3;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/31.0.1650.63+Safari/537.36,-,http://weblogs.asp.net/sample/archive/2007/12/09/asp-net-mvc-framework-part-4-handling-form-edit-and-post-scenarios.aspx,\N,200,0,0,53175,871
2014-02-01,02:01:10,SAMPLEWEBSITE,GET,/blogposts/mvc4/step7.png,X-ARR-LOG-ID=d7472a26-431a-4a4d-99eb-c7b4fda2cf4c,80,-,1.54.23.196,Mozilla/5.0+(Windows+NT+6.3;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/31.0.1650.63+Safari/537.36,-,http://weblogs.asp.net/sample/archive/2007/12/09/asp-net-mvc-framework-part-4-handling-form-edit-and-post-scenarios.aspx,\N,200,0,0,30184,871
2014-03-01,02:01:10,SAMPLEWEBSITE,GET,/blogposts/mvc4/step7.png,X-ARR-LOG-ID=d7472a26-431a-4a4d-99eb-c7b4fda2cf4c,80,-,1.54.23.196,Mozilla/5.0+(Windows+NT+6.3;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/31.0.1650.63+Safari/537.36,-,http://weblogs.asp.net/sample/archive/2007/12/09/asp-net-mvc-framework-part-4-handling-form-edit-and-post-scenarios.aspx,\N,200,0,0,30184,871

Lo script HiveQL partiziona i dati non elaborati per anno e per meseThe HiveQL script partitions the raw data by year and month. e crea tre cartelle di output in base all'input precedente.It creates three output folders based on the previous input. Ogni cartella contiene un file con le voci di ogni mese.Each folder contains a file with entries from each month.

adfgetstarted/partitioneddata/year=2014/month=1/000000_0
adfgetstarted/partitioneddata/year=2014/month=2/000000_0
adfgetstarted/partitioneddata/year=2014/month=3/000000_0

Per vedere un elenco delle attività di trasformazione dei dati di Data Factory oltre alle attività Hive, vedere Trasformazione e analisi tramite Data Factory di Azure.For a list of Data Factory data transformation activities in addition to Hive activity, see Transform and analyze using Azure Data Factory.

Nota

Attualmente, da Azure Data Factory è possibile creare solo cluster HDInsight versione 3.2.Currently, you can only create HDInsight cluster version 3.2 from Azure Data Factory.

PrerequisitiPrerequisites

Per poter eseguire le istruzioni descritte nell'articolo è necessario disporre dei seguenti elementi:Before you begin the instructions in this article, you must have the following items:

Importante

Il supporto di Azure PowerShell per la gestione delle risorse HDInsight tramite Azure Service Manager è deprecato ed è stato rimosso dal 1° gennaio 2017.Azure PowerShell support for managing HDInsight resources using Azure Service Manager is deprecated, and was removed on 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.

Preparare un account di archiviazionePrepare storage account

In questo scenario, è possibile usare fino a tre account di archiviazione:You can use up to three storage accounts in this scenario:

  • account di archiviazione predefinito per il cluster HDInsightdefault storage account for the HDInsight cluster
  • account di archiviazione per i dati di inputstorage account for the input data
  • account di archiviazione per i dati di outputstorage account for the output data

Per semplificare l'esercitazione, si usa un solo account di archiviazione per tutti e tre gli scopi.To simplify the tutorial, you use one storage account to serve the three purposes. Lo script di esempio di Azure PowerShell di questa sezione consente di eseguire queste operazioni:The Azure PowerShell sample script found in this section performs the following tasks:

  1. Accedere ad Azure.Log in to Azure.
  2. Creare un gruppo di risorse di Azure.Create an Azure resource group.
  3. Creare un account di archiviazione di Azure.Create an Azure Storage account.
  4. Creare un contenitore BLOB nell'account di archiviazione.Create a Blob container in the storage account
  5. Copiare i due file seguenti nel contenitore BLOB:Copy the following two files to the Blob container:

Per preparare l'archiviazione e copiare i file con Azure PowerShell:To prepare the storage and copy the files using Azure PowerShell:

Importante

Specificare i nomi del gruppo di risorse di Azure e dell'account di archiviazione di Azure che verranno creati dallo script.Specify names for the Azure resource group and the Azure storage account that will be created by the script. Prendere nota del nome del gruppo di risorse, del nome dell'account di archiviazione e della chiave dell'account di archiviazione restituiti dallo script.Write down resource group name, storage account name, and storage account key outputted by the script. Saranno necessari nella sezione successiva.You need them in the next section.

$resourceGroupName = "<Azure Resource Group Name>"
$storageAccountName = "<Azure Storage Account Name>"
$location = "East US 2"

$sourceStorageAccountName = "hditutorialdata"  
$sourceContainerName = "adfhiveactivity"

$destStorageAccountName = $storageAccountName
$destContainerName = "adfgetstarted" # don't change this value.

####################################
# Connect to Azure
####################################
#region - Connect to Azure subscription
Write-Host "`nConnecting to your Azure subscription ..." -ForegroundColor Green
try{Get-AzureRmContext}
catch{Login-AzureRmAccount}
#endregion

####################################
# Create a resource group, storage, and container
####################################

#region - create Azure resources
Write-Host "`nCreating resource group, storage account and blob container ..." -ForegroundColor Green

New-AzureRmResourceGroup -Name $resourceGroupName -Location $location
New-AzureRmStorageAccount `
    -ResourceGroupName $resourceGroupName `
    -Name $destStorageAccountName `
    -type Standard_LRS `
    -Location $location

$destStorageAccountKey = (Get-AzureRmStorageAccountKey `
    -ResourceGroupName $resourceGroupName `
    -Name $destStorageAccountName)[0].Value

$sourceContext = New-AzureStorageContext `
    -StorageAccountName $sourceStorageAccountName `
    -Anonymous
$destContext = New-AzureStorageContext `
    -StorageAccountName $destStorageAccountName `
    -StorageAccountKey $destStorageAccountKey

New-AzureStorageContainer -Name $destContainerName -Context $destContext
#endregion

####################################
# Copy files
####################################
#region - copy files
Write-Host "`nCopying files ..." -ForegroundColor Green

$blobs = Get-AzureStorageBlob `
    -Context $sourceContext `
    -Container $sourceContainerName

$blobs|Start-AzureStorageBlobCopy `
    -DestContext $destContext `
    -DestContainer $destContainerName

Write-Host "`nCopied files ..." -ForegroundColor Green
Get-AzureStorageBlob -Context $destContext -Container $destContainerName
#endregion

Write-host "`nYou will use the following values:" -ForegroundColor Green
write-host "`nResource group name: $resourceGroupName"
Write-host "Storage Account Name: $destStorageAccountName"
write-host "Storage Account Key: $destStorageAccountKey"

Write-host "`nScript completed" -ForegroundColor Green

Per altre informazioni sullo script di PowerShell, vedere Uso di Azure PowerShell con Archiviazione di Azure.If you need help with the PowerShell script, see Using the Azure PowerShell with Azure Storage. Se invece si vuole usare l'interfaccia della riga di comando di Azure, vedere lo script corrispondente nella sezione Appendice.If you like to use Azure CLI instead, see the Appendix section for the Azure CLI script.

Per esaminare l'account di archiviazione e il suo contenutoTo examine the storage account and the contents

  1. Accedere al portale di Azure.Sign on to the Azure portal.
  2. Fare clic su Gruppi di risorse nel pannello di sinistra.Click Resource groups on the left pane.
  3. Fare doppio clic sul nome del gruppo di risorse creato con lo script di PowerShell.Double-click the resource group name you created in your PowerShell script. Se sono presenti troppi gruppi di risorse elencati, usare il filtro.Use the filter if you have too many resource groups listed.
  4. Nel riquadro Risorse dovrebbe essere elencata una sola risorsa, a meno che il gruppo di risorse non sia condiviso con altri progetti.On the Resources tile, you shall have one resource listed unless you share the resource group with other projects. Tale risorsa è l'account di archiviazione con il nome specificato in precedenza.That resource is the storage account with the name you specified earlier. Fare clic sul nome dell'account di archiviazione.Click the storage account name.
  5. Fare clic sui riquadri BLOB .Click the Blobs tiles.
  6. Fare clic sul contenitore adfgetstarted .Click the adfgetstarted container. Vengono visualizzate due cartelle: inputdata e script.You see two folders: inputdata and script.
  7. Aprire le cartelle e controllare i file al loro interno.Open the folder and check the files in the folders. La cartella inputdata contiene il file input.log con i dati di input, mentre la cartella script contiene il file di script HiveQL.The inputdata contains the input.log file with input data and the script folder contains the HiveQL script file.

Creare una data factory usando un modello di Resource ManagerCreate a data factory using Resource Manager template

Con l'account di archiviazione, i dati di input e lo script HiveQL preparato, si è pronti per creare un'istanza di Azure Data Factory.With the storage account, the input data, and the HiveQL script prepared, you are ready to create an Azure data factory. Esistono diversi metodi per creare un'istanza di Data Factory.There are several methods for creating data factory. In questa esercitazione si crea una data factory distribuendo un modello di Azure Resource Manager con il portale di Azure.In this tutorial, you create a data factory by deploying an Azure Resource Manager template using the Azure portal. È possibile distribuire un modello di Resource Manager anche con l'interfaccia della riga di comando di Azure e Azure PowerShell.You can also deploy a Resource Manager template by using Azure CLI and Azure PowerShell. Per altri metodi di creazione di un'istanza di Data Factory, vedere l'esercitazione per creare la prima istanza di Data Factory.For other data factory creation methods, see Tutorial: Build your first data factory.

  1. Fare clic sull'immagine seguente per accedere ad Azure e aprire il modello di Resource Manager nel portale di Azure.Click the following image to sign in to Azure and open the Resource Manager template in the Azure portal. Il modello si trova all'indirizzo https://hditutorialdata.blob.core.windows.net/adfhiveactivity/data-factory-hdinsight-on-demand.json.The template is located at https://hditutorialdata.blob.core.windows.net/adfhiveactivity/data-factory-hdinsight-on-demand.json. Per informazioni dettagliate sulle entità definite nel modello, vedere la sezione Entità di Data Factory nel modello.See the Data Factory entities in the template section for detailed information about entities defined in the template.

    Deploy to Azure

  2. Selezionare l'opzione Usa esistente per l'impostazione Gruppo di risorse e quindi selezionare il nome del gruppo di risorse creato nel passaggio precedente (con lo script di PowerShell).Select Use existing option for the Resource group setting, and select the name of the resource group you created in the previous step (using PowerShell script).
  3. Immettere un nome per la data factory in Nome data factory.Enter a name for the data factory (Data Factory Name). Il nome deve essere univoco a livello globale.This name must be globally unique.
  4. Immettere il nome dell'account di archiviazione e la chiave dell'account di archiviazione di cui si è preso nota nel passaggio precedente.Enter the storage account name and storage account key you wrote down in the previous step.
  5. Dopo aver letto le condizioni, selezionare Accetto le condizioni riportate sopra.Select I agree to the terms and conditions stated above after reading through terms and conditions.
  6. Selezionare l'opzione Aggiungi al dashboard.Select Pin to dashboard option.
  7. Fare clic su Acquista/Crea.Click Purchase/Create. Nel Dashboard è presente il riquadro Distribuzione modello.You see a tile on the Dashboard called Deploying Template deployment. Attendere che venga visualizzato il pannello Gruppo di risorse per il gruppo di risorse.Wait until the Resource group blade for your resource group opens. Per aprire il pannello del gruppo di risorse è anche possibile fare clic sul riquadro con il nome del gruppo di risorse come titolo.You can also click the tile titled as your resource group name to open the resource group blade.
  8. Se il pannello del gruppo di risorse non è visualizzato, fare clic sul riquadro per aprire il gruppo di risorse.Click the tile to open the resource group if the resource group blade is not already open. Ora sarà visibile un'altra risorsa Data Factory oltre alla risorsa dell'account di archiviazione.Now you shall see one more data factory resource listed in addition to the storage account resource.
  9. Fare clic sul nome della data factory, ossia sul valore specificato per il parametro Nome data factory.Click the name of your data factory (value you specified for the Data Factory Name parameter).
  10. Nel pannello Data Factory fare clic sul riquadro Diagramma.In the Data Factory blade, click the Diagram tile. Il diagramma mostra un'attività con un set di dati di input e un set di dati di output:The diagram shows one activity with an input dataset, and an output dataset:

    Diagramma della pipeline attività Hive di HDInsight on demand in Azure Data Factory

    I nomi sono definiti nel modello di Resource Manager.The names are defined in the Resource Manager template.

  11. Fare doppio clic su AzureBlobOutput.Double-click AzureBlobOutput.
  12. Tra le sezioni aggiornate di recenteverrà visualizzata una sezione.On the Recent updated slices, you shall see one slice. Se lo stato è In corso, attendere finché non diventa Pronto.If the status is In progress, wait until it is changed to Ready. Per creare un cluster HDInsight sono in genere necessari circa 20 minuti.It usually takes about 20 minutes to create an HDInsight cluster.

Controllare l'output della data factoryCheck the data factory output

  1. Per controllare il contenuto dei contenitori adfgetstarted, usare la stessa procedura dell'ultima sessione.Use the same procedure in the last session to check the containers of the adfgetstarted container. Oltre a adfgetsartedsono disponibili due nuovi contenitori:There are two new containers in addition to adfgetsarted:

    • Un contenitore il cui nome segue il modello adf<yourdatafactoryname>-linkedservicename-datetimestampA container with name that follows the pattern: adf<yourdatafactoryname>-linkedservicename-datetimestamp. e che è il contenitore predefinito per il cluster HDInsight.This container is the default container for the HDInsight cluster.
    • adfjobs, il contenitore per i log dei processi di Azure Data Factory.adfjobs: This container is the container for the ADF job logs.

      L'output della data factory viene archiviato in adfgetstarted, in base alla configurazione definita nel modello di Resource Manager.The data factory output is stored in afgetstarted as you configured in the Resource Manager template.

  2. Fare clic su adfgetstarted.Click adfgetstarted.
  3. Fare doppio clic su partitioneddata.Double-click partitioneddata. Verrà visualizzata una cartella year=2014 perché tutti i blog sono datati 2014.You see a year=2014 folder because all the web logs are dated in year 2014.

    Output della pipeline attività Hive di HDInsight on demand in Azure Data Factory

    Eseguendo il drill-down dell'elenco si vedranno tre cartelle relative a gennaio, febbraio e marzo.If you drill down the list, you shall see three folders for January, February, and March. È presente un log per ogni mese.And there is a log for each month.

    Output della pipeline attività Hive di HDInsight on demand in Azure Data Factory

Entità di Data Factory nel modelloData Factory entities in the template

Il modello di Resource Manager di livello principale per una data factory si presenta come segue:Here is how the top-level Resource Manager template for a data factory looks like:

{
    "contentVersion": "1.0.0.0",
    "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "parameters": { ...
    },
    "variables": { ...
    },
    "resources": [
        {
            "name": "[parameters('dataFactoryName')]",
            "apiVersion": "[variables('apiVersion')]",
            "type": "Microsoft.DataFactory/datafactories",
            "location": "westus",
            "resources": [
                { ... },
                { ... },
                { ... },
                { ... }
            ]
        }
    ]
}

Definire una data factoryDefine data factory

È possibile definire una data factory nel modello di Resource Manager come illustrato nell'esempio seguente:You define a data factory in the Resource Manager template as shown in the following sample:

"resources": [
{
    "name": "[parameters('dataFactoryName')]",
    "apiVersion": "[variables('apiVersion')]",
    "type": "Microsoft.DataFactory/datafactories",
    "location": "westus",
}

dataFactoryName è il nome della data factory specificato quando si distribuisce il modello.The dataFactoryName is the name of the data factory you specify when you deploy the template. Il servizio Data Factory è attualmente supportato solo negli Stati Uniti occidentali, negli Stati Uniti orientali e in Europa settentrionale.Data factory is currently only supported in the East US, West US, and North Europe regions.

Definizione delle entità nella data factoryDefining entities within the data factory

Le entità di Data Factory seguenti vengono definite nel modello JSON:The following Data Factory entities are defined in the JSON template:

Servizio collegato Archiviazione di AzureAzure Storage linked service

Il servizio collegato Archiviazione di Azure collega l'account di archiviazione di Azure alla data factory.The Azure Storage linked service links your Azure storage account to the data factory. In questa esercitazione lo stesso account di archiviazione viene usato come account di Archiviazione HDInsight predefinito, come archivio dati di input e come archivio dati di output.In this tutorial, the same storage account is used as the default HDInsight storage account, input data storage, and output data storage. Di conseguenza, si definisce un solo servizio collegato Archiviazione di Azure.Therefore, you define only one Azure Storage linked service. Nella definizione del servizio collegato si specificano il nome e la chiave dell'account di archiviazione di Azure.In the linked service definition, you specify the name and key of your Azure storage account. Per informazioni dettagliate sulle proprietà JSON usate per definire un servizio collegato di Archiviazione di Azure, vedere Servizio collegato Archiviazione di Azure.See Azure Storage linked service for details about JSON properties used to define an Azure Storage linked service.

{
    "name": "[variables('storageLinkedServiceName')]",
    "type": "linkedservices",
    "dependsOn": [ "[concat('Microsoft.DataFactory/dataFactories/', parameters('dataFactoryName'))]" ],
    "apiVersion": "[variables('apiVersion')]",
    "properties": {
        "type": "AzureStorage",
        "typeProperties": {
            "connectionString": "[concat('DefaultEndpointsProtocol=https;AccountName=',parameters('storageAccountName'),';AccountKey=',parameters('storageAccountKey'))]"
        }
    }
}

connectionString usa i parametri storageAccountName e storageAccountKey.The connectionString uses the storageAccountName and storageAccountKey parameters. I valori per questi parametri vengono specificati durante la distribuzione del modello.You specify values for these parameters while deploying the template.

Servizio collegato su richiesta HDInsightHDInsight on-demand linked service

Nella definizione del servizio collegato HDInsight su richiesta si specificano i valori per i parametri di configurazione usati dal servizio Data Factory per creare un cluster Hadoop di HDInsight in fase di esecuzione.In the on-demand HDInsight linked service definition, you specify values for configuration parameters that are used by the Data Factory service to create a HDInsight Hadoop cluster at runtime. Per informazioni dettagliate sulle proprietà JSON usate per definire un servizio collegato su richiesta HDInsight, vedere Servizi collegati di calcolo.See Compute linked services article for details about JSON properties used to define an HDInsight on-demand linked service.


{
    "type": "linkedservices",
    "name": "[variables('hdInsightOnDemandLinkedServiceName')]",
    "dependsOn": [
        "[concat('Microsoft.DataFactory/dataFactories/', parameters('dataFactoryName'))]",
        "[concat('Microsoft.DataFactory/dataFactories/', parameters('dataFactoryName'), '/linkedservices/', variables('storageLinkedServiceName'))]"
    ],
    "apiVersion": "[variables('apiVersion')]",
    "properties": {
        "type": "HDInsightOnDemand",
        "typeProperties": {
            "version": "3.5",
            "clusterSize": 1,
            "timeToLive": "00:05:00",
            "osType": "Linux",
            "sshUserName": "myuser",                            
            "sshPassword": "MyPassword!",
            "linkedServiceName": "[variables('storageLinkedServiceName')]"
        }
    }
}

Tenere presente quanto segue:Note the following points:

  • Data Factory crea automaticamente un cluster HDInsight basato su Linux.The Data Factory creates a Linux-based HDInsight cluster for you.
  • Il cluster Hadoop di HDInsight viene creato nella stessa area dell'account di archiviazione.The HDInsight Hadoop cluster is created in the same region as the storage account.
  • Si noti l'impostazione di timeToLive .Notice the timeToLive setting. Data Factory elimina automaticamente il cluster dopo un periodo di inattività di 30 minuti.The data factory deletes the cluster automatically after the cluster is being idle for 30 minutes.
  • Il cluster HDInsight crea un contenitore predefinito nell'archivio BLOB specificato nel file JSON (linkedServiceName).The HDInsight cluster creates a default container in the blob storage you specified in the JSON (linkedServiceName). HDInsight non elimina il contenitore quando viene eliminato il cluster.HDInsight does not delete this container when the cluster is deleted. Questo comportamento dipende dalla progettazione.This behavior is by design. Con il servizio collegato HDInsight su richiesta, viene creato un cluster HDInsight ogni volta che è necessario elaborare una sezione, a meno che non esista un cluster attivo (timeToLive) che viene eliminato al termine dell'elaborazione.With on-demand HDInsight linked service, a HDInsight cluster is created every time a slice needs to be processed unless there is an existing live cluster (timeToLive) and is deleted when the processing is done.

Per i dettagli, vedere Servizio collegato Azure HDInsight su richiesta .See On-demand HDInsight Linked Service for details.

Importante

Man mano che vengono elaborate più sezioni, vengono visualizzati numerosi contenitori nell'archivio BLOB di Azure.As more slices are processed, you see many containers in your Azure blob storage. Se non sono necessari per risolvere i problemi relativi ai processi, è possibile eliminarli per ridurre i costi di archiviazione.If you do not need them for troubleshooting of the jobs, you may want to delete them to reduce the storage cost. I nomi dei contenitori seguono questo schema: "adfyourdatafactoryname-linkedservicename-datetimestamp".The names of these containers follow a pattern: "adfyourdatafactoryname-linkedservicename-datetimestamp". Per eliminare i contenitori nell'archivio BLOB di Azure, usare strumenti come Microsoft Azure Storage Explorer .Use tools such as Microsoft Storage Explorer to delete containers in your Azure blob storage.

Set di dati di input del BLOB di AzureAzure blob input dataset

Nella definizione del set di dati di input si specificano i nomi del contenitore BLOB, della cartella e del file contenente i dati di input.In the input dataset definition, you specify the names of blob container, folder, and file that contains the input data. Per informazioni dettagliate sulle proprietà JSON usate per definire un set di dati del BLOB di Azure, vedere Proprietà del set di dati del BLOB di Azure.See Azure Blob dataset properties for details about JSON properties used to define an Azure Blob dataset.


{
    "type": "datasets",
    "name": "[variables('blobInputDatasetName')]",
    "dependsOn": [
        "[concat('Microsoft.DataFactory/dataFactories/', parameters('dataFactoryName'))]",
        "[concat('Microsoft.DataFactory/dataFactories/', parameters('dataFactoryName'), '/linkedServices/', variables('storageLinkedServiceName'))]"
    ],
    "apiVersion": "[variables('apiVersion')]",
    "properties": {
        "type": "AzureBlob",
        "linkedServiceName": "[variables('storageLinkedServiceName')]",
        "typeProperties": {
            "fileName": "input.log",
            "folderPath": "adfgetstarted/inputdata",
            "format": {
                "type": "TextFormat",
                "columnDelimiter": ","
            }
        },
        "availability": {
            "frequency": "Month",
            "interval": 1
        },
        "external": true,
        "policy": {}
    }
}

Nella definizione JSON, si notino le impostazioni specifiche seguenti:Notice the following specific settings in the JSON definition:

"fileName": "input.log",
"folderPath": "adfgetstarted/inputdata",

Set di dati di output del BLOB di AzureAzure Blob output dataset

Nella definizione del set di dati di output si specificano i nomi del contenitore BLOB e della cartella contenente i dati di output.In the output dataset definition, you specify the names of blob container and folder that holds the output data. Per informazioni dettagliate sulle proprietà JSON usate per definire un set di dati del BLOB di Azure, vedere Proprietà del set di dati del BLOB di Azure.See Azure Blob dataset properties for details about JSON properties used to define an Azure Blob dataset.


{
    "type": "datasets",
    "name": "[variables('blobOutputDatasetName')]",
    "dependsOn": [
        "[concat('Microsoft.DataFactory/dataFactories/', parameters('dataFactoryName'))]",
        "[concat('Microsoft.DataFactory/dataFactories/', parameters('dataFactoryName'), '/linkedServices/', variables('storageLinkedServiceName'))]"
    ],
    "apiVersion": "[variables('apiVersion')]",
    "properties": {
        "type": "AzureBlob",
        "linkedServiceName": "[variables('storageLinkedServiceName')]",
        "typeProperties": {
            "folderPath": "adfgetstarted/partitioneddata",
            "format": {
                "type": "TextFormat",
                "columnDelimiter": ","
            }
        },
        "availability": {
            "frequency": "Month",
            "interval": 1,
            "style": "EndOfInterval"
        }
    }
}

folderPath specifica il percorso della cartella contenente i dati di output:The folderPath specifies the path to the folder that holds the output data:

"folderPath": "adfgetstarted/partitioneddata",

L'impostazione disponibilità dei set di dati è la seguente:The dataset availability setting is as follows:

"availability": {
    "frequency": "Month",
    "interval": 1,
    "style": "EndOfInterval"
},

In Azure Data Factory, la disponibilità dei set di dati di output attiva la pipeline.In Azure Data Factory, output dataset availability drives the pipeline. In questo esempio, la sezione viene prodotta mensilmente l'ultimo giorno del mese (EndOfInterval).In this example, the slice is produced monthly on the last day of month (EndOfInterval).

Data PipelineData pipeline

Viene definita una pipeline che trasforma i dati eseguendo lo script Hive in un cluster HDInsight di Azure su richiesta.You define a pipeline that transforms data by running Hive script on an on-demand Azure HDInsight cluster. Per le descrizioni degli elementi JSON usati per definire una pipeline in questo esempio, vedere Pipeline JSON.See Pipeline JSON for descriptions of JSON elements used to define a pipeline in this example.

{
    "type": "datapipelines",
    "name": "[parameters('dataFactoryName')]",
    "dependsOn": [
        "[concat('Microsoft.DataFactory/dataFactories/', parameters('dataFactoryName'))]",
        "[concat('Microsoft.DataFactory/dataFactories/', parameters('dataFactoryName'), '/linkedServices/', variables('storageLinkedServiceName'))]",
        "[concat('Microsoft.DataFactory/dataFactories/', parameters('dataFactoryName'), '/linkedServices/', variables('hdInsightOnDemandLinkedServiceName'))]",
        "[concat('Microsoft.DataFactory/dataFactories/', parameters('dataFactoryName'), '/datasets/', variables('blobInputDatasetName'))]",
        "[concat('Microsoft.DataFactory/dataFactories/', parameters('dataFactoryName'), '/datasets/', variables('blobOutputDatasetName'))]"
    ],
    "apiVersion": "[variables('apiVersion')]",
    "properties": {
        "description": "Azure Data Factory pipeline with an Hadoop Hive activity",
        "activities": [
            {
                "type": "HDInsightHive",
                "typeProperties": {
                    "scriptPath": "adfgetstarted/script/partitionweblogs.hql",
                    "scriptLinkedService": "[variables('storageLinkedServiceName')]",
                    "defines": {
                        "inputtable": "[concat('wasb://adfgetstarted@', parameters('storageAccountName'), '.blob.core.windows.net/inputdata')]",
                        "partitionedtable": "[concat('wasb://adfgetstarted@', parameters('storageAccountName'), '.blob.core.windows.net/partitioneddata')]"
                    }
                },
                "inputs": [
                    {
                        "name": "AzureBlobInput"
                    }
                ],
                "outputs": [
                    {
                        "name": "AzureBlobOutput"
                    }
                ],
                "policy": {
                    "concurrency": 1,
                    "retry": 3
                },
                "name": "RunSampleHiveActivity",
                "linkedServiceName": "HDInsightOnDemandLinkedService"
            }
        ],
        "start": "2016-01-01T00:00:00Z",
        "end": "2016-01-31T00:00:00Z",
        "isPaused": false
    }
}

La pipeline contiene un'attività, HDInsightHive.The pipeline contains one activity, HDInsightHive activity. Poiché sia la data di inizio che la data di fine sono nel mese di gennaio 2016, vengono elaboratori i dati per un solo mese (una sezione).As both start and end dates are in January 2016, data for only one month (a slice) is processed. Le date di inizio e di fine dell'attività sono entrambe già passate, quindi Data Factory elabora i dati del mese immediatamente.Both start and end of the activity have a past date, so the Data Factory processes data for the month immediately. Se la data finale è futura, Data Factory crea un'altra sezione a tempo debito.If the end is a future date, the data factory creates another slice when the time comes. Per altre informazioni, vedere Pianificazione ed esecuzione con Data factory.For more information, see Data Factory Scheduling and Execution.

Eseguire la pulizia dell'esercitazioneClean up the tutorial

Eliminare i contenitori BLOB creati dal cluster HDInsight su richiestaDelete the blob containers created by on-demand HDInsight cluster

Con il servizio collegato HDInsight on demand viene creato un cluster HDInsight ogni volta che è necessario elaborare una sezione, a meno che non esista un cluster attivo, timeToLive, che viene eliminato al termine dell'elaborazione.With on-demand HDInsight linked service, an HDInsight cluster is created every time a slice needs to be processed unless there is an existing live cluster (timeToLive); and the cluster is deleted when the processing is done. Per ogni cluster, Azure Data Factory crea un contenitore BLOB nell'archivio BLOB di Azure usato come account di archiviazione predefinito per il cluster.For each cluster, Azure Data Factory creates a blob container in the Azure blob storage used as the default stroage account for the cluster. Anche se il cluster HDInsight viene eliminato, il contenitore di archiviazione BLOB predefinito e l'account di archiviazione associato non vengono eliminati.Even though HDInsight cluster is deleted, the default blob storage container and the associated storage account are not deleted. Questo comportamento dipende dalla progettazione.This behavior is by design. Man mano che vengono elaborate più sezioni, vengono visualizzati numerosi contenitori nell'archivio BLOB di Azure.As more slices are processed, you see many containers in your Azure blob storage. Se non sono necessari per risolvere i problemi relativi ai processi, è possibile eliminarli per ridurre i costi di archiviazione.If you do not need them for troubleshooting of the jobs, you may want to delete them to reduce the storage cost. I nomi dei contenitori seguono il modello adfyourdatafactoryname-linkedservicename-datetimestamp.The names of these containers follow a pattern: adfyourdatafactoryname-linkedservicename-datetimestamp.

Eliminare le cartelle adfjobs e adfyourdatafactoryname-linkedservicename-datetimestamp.Delete the adfjobs and adfyourdatafactoryname-linkedservicename-datetimestamp folders. Il contenitore adfjobs contiene i log dei processi di Azure Data Factory.The adfjobs container contains job logs from Azure Data Factory.

Eliminare il gruppo di risorse.Delete the resource group

Azure Resource Manager viene usato per distribuire, gestire e monitorare la soluzione come gruppo.Azure Resource Manager is used to deploy, manage, and monitor your solution as a group. Eliminando un gruppo di risorse vengono eliminati tutti i componenti all'interno del gruppo.Deleting a resource group deletes all the components inside the group.

  1. Accedere al portale di Azure.Sign on to the Azure portal.
  2. Fare clic su Gruppi di risorse nel pannello di sinistra.Click Resource groups on the left pane.
  3. Fare clic sul nome del gruppo di risorse creato con lo script di PowerShell.Click the resource group name you created in your PowerShell script. Se sono presenti troppi gruppi di risorse elencati, usare il filtro.Use the filter if you have too many resource groups listed. Viene aperto il gruppo di risorse in un nuovo pannello.It opens the resource group in a new blade.
  4. Nel riquadro Risorse dovrebbe essere indicato l'account di archiviazione predefinito e l'istanza Data Factory, a meno che il gruppo di risorse non sia condiviso con altri progetti.On the Resources tile, you shall have the default storage account and the data factory listed unless you share the resource group with other projects.
  5. Fare clic su Elimina nella parte superiore del pannello.Click Delete on the top of the blade. In questo modo si eliminano l'account di archiviazione e i dati in esso archiviati.Doing so deletes the storage account and the data stored in the storage account.
  6. Immettere il nome del gruppo di risorse per confermare l'eliminazione e quindi fare clic su Elimina.Enter the resource group name to confirm deletion, and then click Delete.

Se non si vuole eliminare l'account di archiviazione quando si elimina il gruppo di risorse, prendere in considerazione l'architettura seguente in modo da separare i dati aziendali dall'account di archiviazione predefinito.In case you don't want to delete the storage account when you delete the resource group, consider the following architecture by separating the business data from the default storage account. In questo caso, si ha un gruppo di risorse per l'account di archiviazione con i dati aziendali e un secondo gruppo di risorse per l'account di archiviazione predefinito per il servizio collegato HDInsight e la data factory.In this case, you have one resource group for the storage account with the business data, and the other resource group for the default storage account for HDInsight linked service and the data factory. L'eliminazione del secondo gruppo di risorse non influisce sull'account di archiviazione dei dati aziendali.When you delete the second resource group, it does not impact the business data storage account. A tale scopo, procedere come segue:To do so:

  • Aggiungere quanto segue al gruppo di risorse di livello principale insieme alla risorsa Microsoft.DataFactory/datafactories nel modello di Resource Manager.Add the following to the top-level resource group along with the Microsoft.DataFactory/datafactories resource in your Resource Manager template. Viene creato un account di archiviazione:It creates a storage account:

    {
        "name": "[parameters('defaultStorageAccountName')]",
        "type": "Microsoft.Storage/storageAccounts",
        "location": "[parameters('location')]",
        "apiVersion": "[variables('defaultApiVersion')]",
        "dependsOn": [ ],
        "tags": {
    
        },
        "properties": {
            "accountType": "Standard_LRS"
        }
    },
    
  • Aggiungere un nuovo punto di servizio collegato al nuovo account di archiviazione:Add a new linked service point to the new storage account:

    {
        "dependsOn": [ "[concat('Microsoft.DataFactory/dataFactories/', parameters('dataFactoryName'))]" ],
        "type": "linkedservices",
        "name": "[variables('defaultStorageLinkedServiceName')]",
        "apiVersion": "[variables('apiVersion')]",
        "properties": {
            "type": "AzureStorage",
            "typeProperties": {
                "connectionString": "[concat('DefaultEndpointsProtocol=https;AccountName=',parameters('defaultStorageAccountName'),';AccountKey=',listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('defaultStorageAccountName')), variables('defaultApiVersion')).key1)]"
            }
        }
    },
    
  • Configurare il servizio collegato HDInsight on demand con un dependsOn e un additionalLinkedServiceNames aggiuntivi:Configure the HDInsight ondemand linked service with an additional dependsOn and an additionalLinkedServiceNames:

    {
        "dependsOn": [
            "[concat('Microsoft.DataFactory/dataFactories/', parameters('dataFactoryName'))]",
            "[concat('Microsoft.DataFactory/dataFactories/', parameters('dataFactoryName'), '/linkedservices/', variables('defaultStorageLinkedServiceName'))]",
            "[concat('Microsoft.DataFactory/dataFactories/', parameters('dataFactoryName'), '/linkedservices/', variables('storageLinkedServiceName'))]"
    
        ],
        "type": "linkedservices",
        "name": "[variables('hdInsightOnDemandLinkedServiceName')]",
        "apiVersion": "[variables('apiVersion')]",
        "properties": {
            "type": "HDInsightOnDemand",
            "typeProperties": {
                "version": "3.5",
                "clusterSize": 1,
                "timeToLive": "00:05:00",
                "osType": "Linux",
                "sshUserName": "myuser",                            
                "sshPassword": "MyPassword!",
                "linkedServiceName": "[variables('storageLinkedServiceName')]",
                "additionalLinkedServiceNames": "[variables('defaultStorageLinkedServiceName')]"
            }
        }
    },            
    

    Passaggi successiviNext steps

    Questo articolo ha descritto come usare Azure Data Factory per creare il cluster HDInsight on demand per l'elaborazione dei processi Hive.In this article, you have learned how to use Azure Data Factory to create on-demand HDInsight cluster to process Hive jobs. Altre informazioni:To read more:

  • Esercitazione di Hadoop: Introduzione all'uso di Hadoop basato su Linux in HDInsightHadoop tutorial: Get started using Linux-based Hadoop in HDInsight

  • Creare cluster Hadoop basati su Linux in HDInsightCreate Linux-based Hadoop clusters in HDInsight
  • Documentazione relativa a HDInsightHDInsight documentation
  • Documentazione di Data FactoryData factory documentation

AppendiceAppendix

Script dell'interfaccia della riga di comando di AzureAzure CLI script

Per eseguire l'esercitazione è possibile usare l'interfaccia della riga di comando di Azure anziché Azure PowerShell.You can use Azure CLI instead of using Azure PowerShell to do the tutorial. Per usare l'interfaccia della riga di comando di Azure, per prima cosa installarla seguendo queste istruzioni:To use Azure CLI, first install Azure CLI as per the following instructions:

Importante

Il supporto dell'interfaccia della riga di comando di Azure per la gestione delle risorse HDInsight tramite Azure Service Manager è deprecato ed è stato rimosso il 1° gennaio 2017.Azure CLI support for managing HDInsight resources using Azure Service Manager (ASM) is deprecated, and was removed on January 1, 2017. La procedura descritta in questo documento usa i nuovi comandi dell'interfaccia della riga di comando di Azure, compatibili con Azure Resource Manager.The steps in this document use the new Azure CLI commands that work with Azure Resource Manager.

Per installare l'ultima versione dell'interfaccia della riga di comando di Azure, seguire la procedura descritta in Installare l'interfaccia della riga di comando di Azure.Follow the steps in Install and configure Azure CLI to install the latest version of the Azure CLI. Se sono presenti script che devono essere modificati per l'uso dei nuovi comandi compatibili con Azure Resource Manager, vedere l'articolo relativo alla migrazione a strumenti di sviluppo basati su Azure Resource Manager per i cluster HDInsight per altre informazioni.If you have scripts that need to be modified to use the new commands that work with Azure Resource Manager, see Migrating to Azure Resource Manager-based development tools for HDInsight clusters for more information.

Usare l'interfaccia della riga di comando di Azure per preparare l'archiviazione e copiare i fileUse Azure CLI to prepare the storage and copy the files

azure login

azure config mode arm

azure group create --name "<Azure Resource Group Name>" --location "East US 2"

azure storage account create --resource-group "<Azure Resource Group Name>" --location "East US 2" --type "LRS" <Azure Storage Account Name>

azure storage account keys list --resource-group "<Azure Resource Group Name>" "<Azure Storage Account Name>"
azure storage container create "adfgetstarted" --account-name "<Azure Storage AccountName>" --account-key "<Azure Storage Account Key>"

azure storage blob copy start "https://hditutorialdata.blob.core.windows.net/adfhiveactivity/inputdata/input.log" --dest-account-name "<Azure Storage Account Name>" --dest-account-key "<Azure Storage Account Key>" --dest-container "adfgetstarted"
azure storage blob copy start "https://hditutorialdata.blob.core.windows.net/adfhiveactivity/script/partitionweblogs.hql" --dest-account-name "<Azure Storage Account Name>" --dest-account-key "<Azure Storage Account Key>" --dest-container "adfgetstarted"

Il nome del contenitore è adfgetstarted.The container name is adfgetstarted. Mantenerlo invariato,Keep it as it is. altrimenti sarebbe necessario aggiornare il modello di modello di Resource Manager.Otherwise you need to update the Resource Manager template. Se occorre assistenza per questo script dell'interfaccia della riga di comando, vedere Utilizzo dell'interfaccia della riga di comando di Azure con archiviazione di Azure.If you need help with this CLI script, see Using the Azure CLI with Azure Storage.