Usare Apache Sqoop con Hadoop in HDInsight

Informazioni su come usare Apache Sqoop in HDInsight per importare ed esportare dati tra un cluster HDInsight e Azure SQL Database.

Anche se Apache Hadoop è una scelta naturale per l'elaborazione di dati non strutturati e semistrutturati, ad esempio log e file, potrebbe anche essere necessario elaborare dati strutturati archiviati in database relazionali.

Apache Sqoop è uno strumento progettato per il trasferimento di dati tra cluster Hadoop e 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 Server, MySQL oppure Oracle, trasformare i dati in Hadoop con MapReduce o Apache Hive e quindi esportarli nuovamente in un sistema RDBMS. In questo articolo si usa Azure SQL Database per il database relazionale.

Importante

Questo articolo configura un ambiente di test per eseguire il trasferimento dei dati. Si sceglie quindi un metodo di trasferimento dati per questo ambiente da uno dei metodi della sezione Eseguire processi Sqoop.

Per le versioni di Sqoop supportate nei cluster HDInsight, vedere Novità delle versioni del cluster fornite da HDInsight?

Informazioni sullo scenario

Il cluster HDInsight include alcuni dati di esempio. Usare i due esempi seguenti:

  • Un file di log Apache Log4j , che si trova in /example/data/sample.log. Dal file verranno estratti i log seguenti:
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
...
  • Tabella Hive denominata hivesampletable, che fa riferimento al file di dati che si trova in /hive/warehouse/hivesampletable. La tabella contiene alcuni dati relativi al dispositivo mobile.

    Campo Tipo di dati
    clientid string
    querytime string
    market string
    deviceplatform string
    devicemake string
    devicemodel string
    state string
    country string
    querydwelltime double
    sessionid bigint
    sessionpagevieworder bigint

In questo articolo si usano questi due set di dati per testare l'importazione e l'esportazione di Sqoop.

Configurare l'ambiente di test

Il cluster, il database SQL e altri oggetti vengono creati tramite il portale di Azure usando un modello di Azure Resource Manager. Il modello è disponibile nei modelli di avvio rapido di Azure. Il modello Resource Manager chiama un pacchetto bacpac per distribuire gli schemi di tabella in un database SQL. Se si vuole usare un contenitore privato per i file bacpac, usare i valori seguenti nel modello:

"storageKeyType": "Primary",
"storageKey": "<TheAzureStorageAccountKey>",

Nota

L'importazione tramite un modello o il portale di Azure supporta solo l'importazione di un file BACPAC dall'archiviazione BLOB di Azure.

  1. Selezionare l'immagine seguente per aprire il modello di Resource Manager nel portale di Azure.

    Pulsante Distribuisci in Azure per il nuovo cluster

  2. Immettere le proprietà seguenti:

    Campo Valore
    Subscription Selezionare la sottoscrizione di Azure dall'elenco a discesa.
    Resource group Selezionare il gruppo di risorse dall'elenco a discesa oppure crearne uno nuovo
    Posizione Selezionare un'area dall'elenco a discesa.
    Cluster Name Immettere un nome per il cluster Hadoop. Usare solo lettere minuscole.
    Nome utente dell'account di accesso del cluster Mantenere il valore adminprepopolato .
    Password di accesso al cluster Immettere una password.
    Nome utente SSH Mantenere il valore sshuserprepopolato .
    Password SSH Immettere una password.
    Account di accesso sql Amministrazione Mantenere il valore sqluserprepopolato .
    Password di SQL Amministrazione Immettere una password.
    percorso _artifacts Usare il valore predefinito a meno che non si voglia usare il proprio file bacpac in un percorso diverso.
    token di firma di accesso condiviso percorso _artifacts Lasciare vuoto.
    Nome file Bacpac Usare il valore predefinito a meno che non si voglia usare il proprio file bacpac.
    Posizione Usare il valore predefinito.

    Il nome logico del server SQL è <ClusterName>dbserver. Il nome del database è <ClusterName>db. Il nome predefinito dell'account di archiviazione è e6qhezrh2pdqu.

  3. Selezionare Accetto le condizioni riportate sopra.

  4. Selezionare Acquisto. Viene visualizzato un nuovo riquadro denominato Invio della distribuzione per Distribuzione modello. La creazione del cluster e del database SQL richiede circa 20 minuti.

Eseguire processi Sqoop

HDInsight può eseguire processi Sqoop usando vari metodi. Usare la tabella seguente per decidere il metodo più adatto alle proprie esigenze, quindi fare clic sul collegamento per visualizzare una procedura dettagliata.

Usare questo se si desidera... ...una shell interattiva ... elaborazione batch ...da questo sistema operativo client
SSH ? ? Linux, Unix, Mac OS X o Windows
.NET SDK per Hadoop   ? Windows (per ora)
Azure PowerShell   ? Windows

Limitazioni

  • Esportazione in blocco: con HDInsight basato su Linux, il connettore Sqoop usato per esportare i dati in Microsoft SQL Server o database SQL attualmente non supporta gli inserimenti bulk.
  • Invio in batch: con HDInsight basato su Linux, quando si usa il comando -batch durante gli inserimenti, Sqoop esegue più inserimenti invece di suddividere in batch le operazioni di inserimento.

Passaggi successivi

In questa esercitazione si è appreso come usare Sqoop. Per altre informazioni, vedere: