Caricare dati per processi Hadoop in HDInsight

Azure HDInsight include un file system HDFS (Hadoop Distributed File System) completo su Archiviazione di Microsoft Azure e Azure Data Lake Store. Archiviazione di Azure e Data Lake Store sono stati progettati come estensione Hadoop Distributed File System per offrire un'esperienza lineare ai clienti. Abilitano il set completo di componenti nell'ecosistema Hadoop, con possibilità di agire direttamente sui dati gestiti da Hadoop stesso. Archiviazione di Azure e Data Lake Store sono file system distinti, ottimizzati per l'archiviazione di dati e per l'esecuzione di calcoli su di essi. Per informazioni sui vantaggi dell'uso di Archiviazione di Microsoft Azure, vedere Usare Archiviazione di Microsoft Azure con HDInsight e Usare Data Lake Store con HDInsight.

Prerequisiti

Prima di iniziare, tenere presenti i requisiti seguenti:

Caricare i dati in Archiviazione di Azure

Utilità della riga di comando

Microsoft fornisce le utilità seguenti da usare con Archiviazione di Azure:

Strumento Linux OS X Windows
Interfaccia della riga di comando di Azure
Azure PowerShell
AzCopy
Comando Hadoop

Nota

Mentre l'interfaccia della riga di comando di Azure, Azure PowerShell e AzCopy possono tutti essere usati dall'esterno di Azure, il comando Hadoop è disponibile solo nei cluster HDInsight. Il comando consente solo il caricamento dei dati dal file system locale in Archiviazione di Azure.

L'interfaccia della riga di comando di Azure è uno strumento multipiattaforma che consente di gestire i servizi di Azure. Per caricare i dati in Archiviazione di Azure, seguire questa procedura:

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. La procedura descritta in questo documento usa i nuovi comandi dell'interfaccia della riga di comando di Azure, compatibili con 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. 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.

  1. Installare e configurare l'interfaccia della riga di comando di Azure per Mac, Linux e Windows.
  2. Aprire un prompt dei comandi, una sessione Bash o un'altra shell e usare quanto riportato di seguito per eseguire l'autenticazione alla sottoscrizione di Azure.

    azure login
    

    Quando richiesto, immettere il nome utente e la password per la sottoscrizione.

  3. Immettere il comando seguente per elencare gli account di archiviazione per la sottoscrizione:

    azure storage account list
    
  4. Selezionare l'account di archiviazione contenente il BLOB che si desidera usare, quindi usare il comando seguente per recuperare la chiave per tale account:

    azure storage account keys list <storage-account-name>
    

    Questo comando restituisce le chiavi primaria e secondaria. Copiare il valore della chiave Primary poiché varrà usato nei passaggi successivi.

  5. Usare il comando seguente per recuperare un elenco di contenitori BLOB all'interno dell'account di archiviazione:

    azure storage container list -a <storage-account-name> -k <primary-key>
    
  6. Per caricare e scaricare i file dal BLOB, usare i comandi seguenti:

    • Per caricare un file:

      azure storage blob upload -a <storage-account-name> -k <primary-key> <source-file> <container-name> <blob-name>
      
    • Per scaricare un file:

      azure storage blob download -a <storage-account-name> -k <primary-key> <container-name> <blob-name> <destination-file>
      

Nota

Se si usa sempre lo stesso account di archiviazione, anziché specificare l'account e la chiave per ogni comando è possibile impostare le variabili di ambiente seguenti:

  • AZURE_STORAGE_ACCOUNT: nome dell'account di archiviazione
  • AZURE_STORAGE_ACCESS_KEY: chiave dell'account di archiviazione

Azure PowerShell

Azure PowerShell è un ambiente di scripting che può essere usato per controllare e automatizzare la distribuzione e la gestione dei carichi di lavoro in Azure. Per informazioni sulla configurazione della workstation per l'esecuzione di Azure PowerShell, vedere Come installare e configurare Azure PowerShell.

Importante

Il supporto di Azure PowerShell per la gestione delle risorse HDInsight tramite Azure Service Manager è deprecato ed è stato rimosso dal 1° gennaio 2017. La procedura descritta in questo documento usa i nuovi cmdlet HDInsight, compatibili con Azure Resource Manager.

Per installare la versione più recente, seguire la procedura descritta in Come installare e configurare 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 .

Per caricare un file locale in Archiviazione di Azure

  1. Aprire la console di Azure PowerShell come illustrato in Come installare e configurare Azure PowerShell.
  2. Impostare i valori delle prime cinque variabili nello script seguente:

    $resourceGroupName = "<AzureResourceGroupName>"
    $storageAccountName = "<StorageAccountName>"
    $containerName = "<ContainerName>"
    
    $fileName ="<LocalFileName>"
    $blobName = "<BlobName>"
    
    # Get the storage account key
    $storageAccountKey = (Get-AzureRmStorageAccountKey -ResourceGroupName $resourceGroupName -Name $storageAccountName)[0].Value
    # Create the storage context object
    $destContext = New-AzureStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $storageaccountkey
    
    # Copy the file from local workstation to the Blob container
    Set-AzureStorageBlobContent -File $fileName -Container $containerName -Blob $blobName -context $destContext
    
  3. Incollare lo script nella console di Azure PowerShell per eseguirlo e copiare il file.

Per script di PowerShell di esempio creati per funzionare con HDInsight, vedere Strumenti HDInsight.

AzCopy

AzCopy è un strumento della riga di comando progettato per semplificare l'attività di trasferimento dati in entrata e in uscita da un account di archiviazione di Azure. Può essere usato come strumento autonomo o può essere incorporato in un'applicazione esistente. Download di AzCopy.

La sintassi di AzCopy è:

AzCopy <Source> <Destination> [filePattern [filePattern...]] [Options]

Per altre informazioni, vedere AzCopy: caricamento/download di file per BLOB di Azure.

È disponibile l'anteprima di Azcopy in Linux. Vedere Annuncio della versione di anteprima di AzCopy in Linux.

Riga di comando di Hadoop

La riga di comando di Hadoop è utile solo per archiviare i dati nel BLOB di archiviazione di Azure quando i dati sono già presenti nel nodo head del cluster.

Per usare il comando Hadoop, è innanzitutto necessario connettersi nel nodo head mediante uno dei metodi seguenti:

Dopo essersi connessi, è possibile usare la sintassi seguente per caricare un file nell'archiviazione.

hadoop -copyFromLocal <localFilePath> <storageFilePath>

Ad esempio, hadoop fs -copyFromLocal data.txt /example/data/data.txt

Poiché il file system predefinito per HDInsight si trova in Archiviazione di Microsoft Azure, /example/datadavinci.txt si trova effettivamente in Archiviazione di Microsoft Azure. È inoltre possibile fare riferimento al file come segue:

wasb:///example/data/data.txt

oppure

wasb://<ContainerName>@<StorageAccountName>.blob.core.windows.net/example/data/davinci.txt

Per un elenco di altri comandi Hadoop che funzionano con i file, vedere http://hadoop.apache.org/docs/r2.7.0/hadoop-project-dist/hadoop-common/FileSystemShell.html

Avviso

Nei cluster HBase la dimensione di blocco predefinita usata per la scrittura dei dati è 256 KB. Questa impostazione non costituisce un problema quando si usano API HBase o REST, ma l'uso dei comandi hadoop o hdfs dfs per scrivere dati di dimensioni superiori a ~12 GB provoca un errore. Per altre informazioni, vedere la sezione Eccezione di archiviazione per la scrittura nel BLOB più avanti in questo articolo.

Client con interfaccia grafica

Esistono diverse applicazioni che forniscono un'interfaccia grafica per usare Archiviazione di Azure. Nella tabella seguente è riportato un elenco di alcune di queste applicazioni:

Client Linux OS X Windows
Microsoft Visual Studio Tools per HDInsight
Azure Storage Explorer
Cloud Storage Studio 2
CloudXplorer
Azure Explorer
Cyberduck

Visual Studio Tools per HDInsight

Per altre informazioni, vedere Esplorare le risorse collegate.

Azure Storage Explorer

Azure Storage Explorer è uno strumento utile per l'esame e la modifica dei dati nei BLOB. Si tratta di uno strumento gratuito open-source che è possibile scaricare da http://storageexplorer.com/. Anche il codice sorgente è disponibile da questo collegamento.

Prima di usare lo strumento è necessario conoscere il nome e la chiave dell'account di archiviazione di Azure. Per istruzioni sull'acquisizione di queste informazioni, vedere la sezione "Procedura: Visualizzare, copiare e rigenerare le chiavi di accesso alle risorse di archiviazione" dell'articolo Creare, gestire o eliminare un account di archiviazione.

  1. Eseguire Azure Storage Explorer. Se è la prima volta che si esegue Storage Explorer, è necessario specificare il _nome account di archiviazione e la chiave account di archiviazione. Se questo strumento è stato eseguito prima, usare il pulsante Aggiungi per aggiungere un nuovo nome e una nuova chiave dell'account di archiviazione.

    Immettere il nome e la chiave dell'account di archiviazione usati dal cluster HDInsight e quindi selezionare SALVA E APRI.

    HDI.AzureStorageExplorer

  2. Nell'elenco dei contenitori a sinistra dell'interfaccia, fare clic sul nome del contenitore associato al cluster HDInsight. Per impostazione predefinita, questo è il nome del cluster HDInsight, ma potrebbe essere diverso se è stato immesso un nome specifico durante la creazione del cluster.
  3. Sulla barra degli strumenti, selezionare l'icona di caricamento.

    Barra degli strumenti con icona di caricamento evidenziata

  4. Specificare un file da caricare e quindi fare clic su Open. Quando richiesto, selezionare Carica per caricare il file nella directory principale del contenitore di archiviazione. Se si vuole caricare il file in un percorso specifico, immettere il percorso nel campo Destinazione, quindi selezionare Carica.

    Finestra di dialogo di caricamento file

    Dopo che il file ha terminato il caricamento, è possibile utilizzarlo dai processi nel cluster HDInsight.

Montare Archiviazione di Azure come unità locale

Vedere Montare Archiviazione di Azure come unità locale.

Caricamento tramite servizi

Data factory di Azure

Data factory di Azure è un servizio completamente gestito per la composizione di servizi di archiviazione, elaborazione e spostamento dei dati in pipeline di produzione dei dati ottimizzate, scalabili e affidabili.

Azure Data Factory può essere usato per spostare i dati in Archiviazione di Microsoft Azure o per creare pipeline di dati che usano direttamente le funzionalità di HDInsight, ad esempio Hive e Pig.

Per altre informazioni, vedere Documentazione di Data factory.

Apache Sqoop

Sqoop è uno strumento progettato per il trasferimento di dati tra Hadoop e i database relazionali. Può essere usato per importare dati in HDFS (Hadoop Distributed File System) da un sistema di gestione di database relazionali (RDBMS), ad esempio SQL, MySQL oppure Oracle, trasformare i dati in Hadoop con MapReduce o Hive e quindi esportarli nuovamente in un sistema RDBMS.

Per altre informazioni, vedere Usare Sqoop con HDInsight.

SDK di sviluppo

È possibile accedere ad Archiviazione di Microsoft Azure anche tramite un SDK di Azure dai linguaggi di programmazione seguenti:

  • .NET
  • Java
  • Node.js
  • PHP
  • Python
  • Ruby

Per altre informazioni sull'installazione di SDK di Azure, vedere Download di Azure

Risoluzione dei problemi

Eccezione di archiviazione per la scrittura nel BLOB

Sintomi: quando si usa il comando hadoop o hdfs dfs per scrivere file di dimensioni pari o superiori a ~12 GB in un cluster HBase, è possibile che si verifichi l'errore seguente:

ERROR azure.NativeAzureFileSystem: Encountered Storage Exception for write on Blob : example/test_large_file.bin._COPYING_ Exception details: null Error Code : RequestBodyTooLarge
copyFromLocal: java.io.IOException
        at com.microsoft.azure.storage.core.Utility.initIOException(Utility.java:661)
        at com.microsoft.azure.storage.blob.BlobOutputStream$1.call(BlobOutputStream.java:366)
        at com.microsoft.azure.storage.blob.BlobOutputStream$1.call(BlobOutputStream.java:350)
        at java.util.concurrent.FutureTask.run(FutureTask.java:262)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
        at java.util.concurrent.FutureTask.run(FutureTask.java:262)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:745)
Caused by: com.microsoft.azure.storage.StorageException: The request body is too large and exceeds the maximum permissible limit.
        at com.microsoft.azure.storage.StorageException.translateException(StorageException.java:89)
        at com.microsoft.azure.storage.core.StorageRequest.materializeException(StorageRequest.java:307)
        at com.microsoft.azure.storage.core.ExecutionEngine.executeWithRetry(ExecutionEngine.java:182)
        at com.microsoft.azure.storage.blob.CloudBlockBlob.uploadBlockInternal(CloudBlockBlob.java:816)
        at com.microsoft.azure.storage.blob.CloudBlockBlob.uploadBlock(CloudBlockBlob.java:788)
        at com.microsoft.azure.storage.blob.BlobOutputStream$1.call(BlobOutputStream.java:354)
        ... 7 more

Causa: i cluster HBase in HDInsight usano per impostazione predefinita dimensioni di blocco pari a 256 KB per la scrittura nelle risorse di archiviazione di Azure. Benché questa impostazione sia ottimale per le API HBase o REST, genera un errore se si usano le utilità da riga di comando hadoop o hdfs dfs.

Risoluzione: usare fs.azure.write.request.size per specificare dimensioni maggiori per i blocchi. È possibile eseguire questa operazione per i singoli utenti usando il parametro -D. Il comando seguente è un esempio di utilizzo di questo parametro con il comando hadoop:

hadoop -fs -D fs.azure.write.request.size=4194304 -copyFromLocal test_large_file.bin /example/data

È anche possibile aumentare globalmente il valore di fs.azure.write.request.size usando Ambari. La procedura seguente consente di cambiare il valore nell'interfaccia utente Web di Ambari:

  1. Nel browser passare all'interfaccia utente Web di Ambari per il cluster, ovvero https://CLUSTERNAME.azurehdinsight.net, dove CLUSTERNAME è il nome del cluster.

    Quando richiesto, immettere il nome dell'amministratore e la password per il cluster.

  2. Sul lato sinistro dello schermo selezionale HDFS e quindi fare clic sulla scheda Configs (Configurazioni).
  3. Nel campo Filter (Filtro) immettere fs.azure.write.request.size. Il campo e il valore corrente vengono visualizzati al centro della pagina.
  4. Modificare il valore da 262144 (256 KB) al nuovo valore, ad esempio 4194304 (4 MB).

Immagine della modifica del valore tramite l'interfaccia utente Web di Ambari

Per altre informazioni sull'uso di Ambari, vedere Gestire i cluster HDInsight mediante l'utilizzo dell'interfaccia utente Web Ambari.

Passaggi successivi

Dopo aver appreso come importare dati in HDInsight, leggere gli articoli seguenti per informazioni sull'esecuzione di analisi: