Importieren und Exportieren von Daten zwischen Apache Hadoop unter HDInsight und Azure SQL-Datenbank mithilfe von Apache Sqoop
Erfahren Sie, wie Sie Apache Sqoop zum Importieren und Exportieren von Daten zwischen einem Apache Hadoop-Cluster unter Azure HDInsight und Azure SQL-Datenbank oder Microsoft SQL Server verwenden. Die Schritte in diesem Artikel verwenden den Befehl sqoop
direkt vom Hauptknoten des Hadoop-Clusters aus. Sie können SSH verwenden, um die Verbindung zum Hauptknoten herzustellen und die Befehle in diesem Artikel auszuführen. Dieser Artikel ist eine Fortsetzung von Verwenden von Apache Sqoop mit Hadoop in HDInsight.
Voraussetzungen
Die unter Verwenden von Apache Sqoop mit Hadoop in HDInsight beschriebene Einrichtung der Testumgebung muss abgeschlossen sein.
Einen SSH-Client. Weitere Informationen finden Sie unter Herstellen einer Verbindung mit HDInsight (Hadoop) per SSH.
Vertrautheit mit Sqoop. Weitere Informationen finden Sie im Sqoop-Benutzerhandbuch.
Einrichten
Verwenden Sie einen ssh-Befehl zum Herstellen der Verbindung mit dem Cluster. Bearbeiten Sie den folgenden Befehl, indem Sie CLUSTERNAME durch den Namen Ihres Clusters ersetzen, und geben Sie den Befehl dann ein:
ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
Legen Sie zur Verbesserung der Benutzerfreundlichkeit Variablen fest. Ersetzen Sie
PASSWORD
,MYSQLSERVER
undMYDATABASE
durch die entsprechenden Werte, und geben Sie dann die folgenden Befehle ein: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"
Sqoop-Export
Aus Hive in SQL.
Geben Sie den folgenden Befehl in der geöffneten SSH-Verbindung ein, um sicherzustellen, dass Sqoop Ihre Datenbank sehen kann. Dieser Befehl gibt eine Liste von Datenbanken zurück.
sqoop list-databases --connect $SERVER_CONNECT
Geben Sie den folgenden Befehl ein, um eine Liste von Tabellen für die angegebene Datenbank anzuzeigen:
sqoop list-tables --connect $SERVER_DB_CONNECT
Geben Sie den folgenden Befehl in Ihre offene SSH-Verbindung ein, um Daten aus der Hive-Tabelle
hivesampletable
in die Tabellemobiledata
in Ihre Datenbank zu exportieren:sqoop export --connect $SERVER_DB_CONNECT \ -table mobiledata \ --hcatalog-table hivesampletable
Verwenden Sie die folgenden Abfragen über Ihre SSH-Verbindung, um die exportierten Daten anzuzeigen und zu überprüfen, ob die Daten exportiert wurden:
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)"
Sqoop-Import
Aus SQL in Azure Storage.
Geben Sie den folgenden Befehl in der geöffneten SSH-Verbindung ein, um Daten aus der Tabelle
mobiledata
in SQL in das Verzeichniswasbs:///tutorials/usesqoop/importeddata
in HDInsight zu importieren. In den Daten sind die Felder durch ein Tabstoppzeichen getrennt und die Zeilen durch ein Zeilenumbruchzeichen abgeschlossen.sqoop import --connect $SERVER_DB_CONNECT \ --table mobiledata \ --target-dir 'wasb:///tutorials/usesqoop/importeddata' \ --fields-terminated-by '\t' \ --lines-terminated-by '\n' -m 1
Alternativ können Sie auch eine Hive-Tabelle festlegen:
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
Nachdem der Import abgeschlossen ist, geben Sie in der geöffneten SSH-Verbindung den folgenden Befehl ein, um die Daten im neuen Verzeichnis aufzulisten:
hadoop fs -tail /tutorials/usesqoop/importeddata/part-m-00000
Verwenden Sie Beeline, um zu überprüfen, ob die Tabelle in Hive erstellt wurde.
Verbinden
beeline -u 'jdbc:hive2://headnodehost:10001/;transportMode=http'
Führen Sie alle der folgenden Abfragen einzeln aus, und überprüfen Sie die Ausgabe:
show tables; describe mobiledata_imported2; SELECT COUNT(*) FROM mobiledata_imported2; SELECT * FROM mobiledata_imported2 LIMIT 10;
Beenden Sie Beeline mit dem Befehl
!exit
.
Einschränkungen
Massenexport: Bei Linux-basiertem HDInsight unterstützt der zum Exportieren von Daten nach SQL verwendete Sqoop-Connector keine Masseneinfügung.
Batchverarbeitung: Wenn Sie in Linux-basiertem HDInsight zum Ausführen von Einfügevorgängen den Schalter
-batch
verwenden, führt Sqoop mehrere Einfügevorgänge aus, anstatt diese zu einem Batch zusammenzufassen.
Wichtige Hinweise
Sowohl HDInsight als auch SQL Server müssen sich im selben virtuellen Azure-Netzwerk befinden.
Ein Beispiel finden Sie im Dokument Herstellen einer Verbindung von HDInsight mit Ihrem lokalen Netzwerk.
Weitere Informationen zur Verwendung von HDInsight mit einem virtuellen Azure-Netzwerk finden Sie im Dokument Erweitern der HDInsight-Funktionen mit Azure Virtual Network. Weitere Informationen zu Azure Virtual Network erhalten Sie im Dokument Übersicht über virtuelle Netzwerke.
SQL Server muss so konfiguriert sein, dass SQL-Authentifizierung erlaubt ist. Weitere Informationen finden Sie im Artikel Auswählen eines Authentifizierungsmodus.
Sie müssen SQL Server möglicherweise für Remoteverbindungen konfigurieren.
Nächste Schritte
Sie haben nun gelernt, wie Sie Sqoop verwenden. Weitere Informationen finden Sie unter:
- Verwenden von Apache Oozie mit HDInsight: Verwenden der Sqoop-Aktion in einem Oozie-Workflow.
- Analysieren von Daten zu Flugverspätungen mit HDInsight: Verwenden von Interactive Query zum Analysieren von Daten zu Flugverspätungen und Verwenden von Sqoop zum Exportieren von Daten in eine Datenbank in Azure.
- Hochladen von Daten in HDInsight: Andere Methoden zum Hochladen von Daten in HDInsight/Azure Blob Storage.