Usare Apache Sqoop per importare ed esportare dati tra Apache Hadoop in HDInsight e database SQL di Azure

Informazioni su come usare Apache Sqoop per importare ed esportare tra un cluster Apache Hadoop in Azure HDInsight e database SQL di Azure o Microsoft SQL Server. La procedura descritta in questo documento usa il comando sqoop direttamente dal nodo head del cluster Hadoop. Usare SSH per connettersi al nodo head ed eseguire i comandi di questo documento. Questo articolo riprende l'articolo Usare Apache Sqoop con Hadoop in HDInsight.

Prerequisiti

Impostazione

  1. Usare il comando ssh per connettersi al cluster. Modificare il comando seguente sostituendo CLUSTERNAME con il nome del cluster in uso e quindi immettere il comando:

    ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
    
  2. Per semplificare l'uso, impostare le variabili. Sostituire PASSWORD, MYSQLSERVERe MYDATABASE con i valori pertinenti e quindi immettere i comandi seguenti:

    export PASSWORD='PASSWORD'
    export SQL_SERVER="MYSQLSERVER"
    export DATABASE="MYDATABASE"
    
    
    export SERVER_CONNECT="jdbc:sqlserver://$SQL_SERVER.database.windows.net:1433;user=sqluser;password=$PASSWORD"
    export SERVER_DB_CONNECT="jdbc:sqlserver://$SQL_SERVER.database.windows.net:1433;user=sqluser;password=$PASSWORD;database=$DABATASE"
    

Esportazione con Sqoop

Da Hive a SQL.

  1. Per verificare che Sqoop possa visualizzare il database, immettere il comando seguente nella connessione SSH aperta. Questo comando restituisce un elenco di database.

    sqoop list-databases --connect $SERVER_CONNECT
    
  2. Immettere il comando seguente per visualizzare un elenco di tabelle per il database specificato:

    sqoop list-tables --connect $SERVER_DB_CONNECT
    
  3. Per esportare i dati dalla tabella Hive hivesampletable alla mobiledata tabella nel database, immettere il comando seguente nella connessione SSH aperta:

    sqoop export --connect $SERVER_DB_CONNECT \
    -table mobiledata \
    --hcatalog-table hivesampletable
    
  4. Per verificare che i dati siano stati esportati, usare le query seguenti dalla connessione SSH per visualizzare i dati esportati:

    sqoop eval --connect $SERVER_DB_CONNECT \
    --query "SELECT COUNT(*) from dbo.mobiledata WITH (NOLOCK)"
    
    
    sqoop eval --connect $SERVER_DB_CONNECT \
    --query "SELECT TOP(10) * from dbo.mobiledata WITH (NOLOCK)"
    

Importazione con Sqoop

Da SQL ad Archiviazione di Azure.

  1. Immettere il comando seguente nella connessione SSH aperta per importare dati dalla mobiledata tabella in SQL alla wasbs:///tutorials/usesqoop/importeddata directory in HDInsight. I campi nei dati sono separati da un carattere di tabulazione e le righe terminano con un carattere di nuova riga.

    sqoop import --connect $SERVER_DB_CONNECT \
    --table mobiledata \
    --target-dir 'wasb:///tutorials/usesqoop/importeddata' \
    --fields-terminated-by '\t' \
    --lines-terminated-by '\n' -m 1
    
  2. In alternativa, è anche possibile specificare una tabella Hive:

    sqoop import --connect $SERVER_DB_CONNECT \
    --table mobiledata \
    --target-dir 'wasb:///tutorials/usesqoop/importeddata2' \
    --fields-terminated-by '\t' \
    --lines-terminated-by '\n' \
    --create-hive-table \
    --hive-table mobiledata_imported2 \
    --hive-import -m 1
    
  3. Al termine dell'importazione, immettere il comando seguente nella connessione SSH aperta per elencare i dati nella nuova directory:

    hadoop fs -tail /tutorials/usesqoop/importeddata/part-m-00000
    
  4. Usare beeline per verificare che la tabella sia stata creata in Hive.

    1. Connessione

      beeline -u 'jdbc:hive2://headnodehost:10001/;transportMode=http'
      
    2. Eseguire ogni query di seguito una alla volta ed esaminare l'output:

      show tables;
      describe mobiledata_imported2;
      SELECT COUNT(*) FROM mobiledata_imported2;
      SELECT * FROM mobiledata_imported2 LIMIT 10;
      
    3. Uscire da beeline con !exit.

Limiti

  • Esportazione in blocco: con HDInsight basato su Linux, il connettore Sqoop usato per esportare i dati in SQL non supporta inserimenti in blocco.

  • 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.

Considerazioni importanti

Passaggi successivi

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