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
Il completamento della configurazione dell'ambiente di test, come indicato nell'articolo Usare Apache Sqoop con Hadoop in HDInsight.
Un client SSH. Per altre informazioni, vedere Connettersi a HDInsight (Apache Hadoop) con SSH.
Familiarità con Sqoop. Per altre informazioni, vedere il Manuale dell'utente di Sqoop.
Impostazione
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
Per semplificare l'uso, impostare le variabili. Sostituire
PASSWORD
,MYSQLSERVER
eMYDATABASE
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.
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
Immettere il comando seguente per visualizzare un elenco di tabelle per il database specificato:
sqoop list-tables --connect $SERVER_DB_CONNECT
Per esportare i dati dalla tabella Hive
hivesampletable
allamobiledata
tabella nel database, immettere il comando seguente nella connessione SSH aperta:sqoop export --connect $SERVER_DB_CONNECT \ -table mobiledata \ --hcatalog-table hivesampletable
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.
Immettere il comando seguente nella connessione SSH aperta per importare dati dalla
mobiledata
tabella in SQL allawasbs:///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
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
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
Usare beeline per verificare che la tabella sia stata creata in Hive.
Connessione
beeline -u 'jdbc:hive2://headnodehost:10001/;transportMode=http'
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;
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
HDInsight e SQL Server devono trovarsi nella stessa rete virtuale di Azure.
Per un esempio, vedere Come connettere HDInsight al documento di rete locale.
Per altre informazioni sull'uso di HDInsight con un Rete virtuale di Azure, vedere come estendere HDInsight con Azure Rete virtuale documento. Per altre informazioni su Rete virtuale di Azure, vedere il documenti di panoramica sulle reti virtuali.
SQL Server deve essere configurato per consentire l'autenticazione SQL. Per altre informazioni, consultare il documento Scegliere una modalità di autenticazione.
Potrebbe essere necessario configurare SQL Server affinché accetti le connessioni remote.
Passaggi successivi
In questa esercitazione si è appreso come usare Sqoop. Per altre informazioni, vedere:
- Usare Apache Oozie con HDInsight: usare l'azione Sqoop in un flusso di lavoro Oozie.
- Analizzare i dati sui ritardi dei voli con HDInsight: usare Interactive Query per analizzare i dati sui ritardi dei voli e quindi usare Sqoop per esportare i dati in un database in Azure.
- Caricare i dati in HDInsight: per altri metodi per il caricamento di file in HDInsight o nell'archiviazione BLOB di Azure.