Kopieren von Daten zwischen Data Lake Storage Gen1 und Azure SQL-Datenbank mithilfe von Sqoop
Erfahren Sie mehr über das Verwenden von Apache Sqoop zum Importieren und Exportieren von Daten zwischen Azure SQL-Datenbank und Azure Data Lake Storage Gen1.
Was ist Sqoop?
Big Data-Anwendungen sind eine gute Wahl für die Verarbeitung unstrukturierter und halbstrukturierter Daten wie z. B. Protokolle und Dateien. Allerdings müssen unter Umständen strukturierte Daten verarbeitet werden, die in relationalen Datenbanken gespeichert sind.
Apache Sqoop ist ein Tool zum Übertragen von Daten zwischen relationalen Datenbanken und einem Big Data-Repository wie Data Lake Storage Gen1. Mit diesem Tool können Sie Daten aus einem relationalen Datenbank-Managementsystem (RDBMS) wie z.B. Azure SQL-Datenbank in Data Lake Storage Gen1 importieren. Sie können die Daten dann mithilfe von Big Data-Workloads transformieren und analysieren und anschließend wieder in ein RDBMS exportieren. In diesem Artikel verwenden Sie eine Datenbank in Azure SQL-Datenbank als relationale Datenbank für den Import/Export.
Voraussetzungen
Bevor Sie mit diesem Lernprogramm beginnen können, benötigen Sie Folgendes:
- Ein Azure-Abonnement. Siehe Kostenlose Azure-Testversion.
- Ein Azure Data Lake Storage Gen1-Konto. Eine Anleitung zum Erstellen des Kontos finden Sie unter Erste Schritte mit Azure Data Lake Storage Gen1.
- Ein Azure HDInsight-Cluster mit Zugriff auf ein Data Lake Storage Gen1-Konto. Weitere Informationen finden Sie unter Erstellen eines HDInsight-Clusters mit Data Lake Storage Gen1. In diesem Artikel wird davon ausgegangen, dass Sie einen HDInsight-Linux-Cluster mit Data Lake Storage Gen1-Zugriff verwenden.
- Azure SQL-Datenbank. Anweisungen zum Erstellen einer Datenbank in Azure SQL-Datenbank finden Sie unter Erstellen einer Datenbank in Azure SQL-Datenbank
Erstellen von Beispieltabellen in der Datenbank
Erstellen Sie zuerst zwei Beispieltabellen in der Datenbank. Stellen Sie mit SQL Server Management Studio oder Visual Studio eine Verbindung mit der Datenbank her, und führen Sie die folgenden Abfragen aus:
Erstellen von Table1
CREATE TABLE [dbo].[Table1]( [ID] [int] NOT NULL, [FName] [nvarchar](50) NOT NULL, [LName] [nvarchar](50) NOT NULL, CONSTRAINT [PK_Table_1] PRIMARY KEY CLUSTERED ( [ID] ASC ) ) ON [PRIMARY] GO
Erstellen von Table2
CREATE TABLE [dbo].[Table2]( [ID] [int] NOT NULL, [FName] [nvarchar](50) NOT NULL, [LName] [nvarchar](50) NOT NULL, CONSTRAINT [PK_Table_2] PRIMARY KEY CLUSTERED ( [ID] ASC ) ) ON [PRIMARY] GO
Führen Sie den folgenden Befehl aus, um Table1einige Beispieldaten hinzuzufügen. Lassen Sie Table2 leer. Später importieren Sie Daten aus Table1 in Data Lake Storage Gen1. Anschließend exportieren Sie Daten aus Data Lake Storage Gen1 in Table2.
INSERT INTO [dbo].[Table1] VALUES (1,'Neal','Kell'), (2,'Lila','Fulton'), (3, 'Erna','Myers'), (4,'Annette','Simpson');
Verwenden von Sqoop in einem HDInsight-Cluster mit Zugriff auf Data Lake Storage Gen1
In einem HDInsight-Cluster sind die Sqoop-Pakete bereits verfügbar. Wenn Sie den HDInsight-Cluster so konfiguriert haben, dass Data Lake Storage Gen1 als zusätzlicher Speicher verwendet wird, können Sie Sqoop (ohne Konfigurationsänderungen) zum Importieren/Exportieren von Daten zwischen einer relationalen Datenbank (etwa Azure SQL-Datenbank) und einem Data Lake Storage Gen1-Konto verwenden.
In diesem Artikel wird davon ausgegangen, dass Sie einen Linux-Cluster erstellt haben. Daher sollten Sie SSH für das Herstellen einer Verbindung mit dem Cluster verwenden. Informationen hierzu finden Sie unter Verbinden mit einem Linux-basierten HDInsight-Cluster.
Überprüfen Sie, ob Sie vom Cluster auf das Data Lake Storage Gen1-Konto zugreifen können. Geben Sie an der SSH-Eingabeaufforderung Folgendes ein:
hdfs dfs -ls adl://<data_lake_storage_gen1_account>.azuredatalakestore.net/
Mit diesem Befehl sollte eine Liste der Dateien und Ordner im Data Lake Storage Gen1-Konto bereitgestellt werden.
Importieren von Daten aus Azure SQL-Datenbank in Data Lake Storage Gen1
Navigieren Sie zu dem Verzeichnis, in dem Sqoop-Pakete verfügbar sind. In der Regel ist dies der Speicherort
/usr/hdp/<version>/sqoop/bin
.Importieren Sie die Daten aus Table1 in das Data Lake Storage Gen1-Konto. Verwenden Sie die folgende Syntax:
sqoop-import --connect "jdbc:sqlserver://<sql-database-server-name>.database.windows.net:1433;username=<username>@<sql-database-server-name>;password=<password>;database=<sql-database-name>" --table Table1 --target-dir adl://<data-lake-storage-gen1-name>.azuredatalakestore.net/Sqoop/SqoopImportTable1
Der Platzhalter sql-database-server-name steht für den Namen des Servers, auf dem die Datenbank ausgeführt wird. sql-database-name steht für den eigentlichen Datenbanknamen.
Beispiel:
sqoop-import --connect "jdbc:sqlserver://mysqoopserver.database.windows.net:1433;username=user1@mysqoopserver;password=<password>;database=mysqoopdatabase" --table Table1 --target-dir adl://myadlsg1store.azuredatalakestore.net/Sqoop/SqoopImportTable1
Stellen Sie sicher, dass die Daten in das Data Lake Storage Gen1-Konto übertragen wurden. Führen Sie den folgenden Befehl aus:
hdfs dfs -ls adl://hdiadlsg1store.azuredatalakestore.net/Sqoop/SqoopImportTable1/
Die folgende Ausgabe wird angezeigt.
-rwxrwxrwx 0 sshuser hdfs 0 2016-02-26 21:09 adl://hdiadlsg1store.azuredatalakestore.net/Sqoop/SqoopImportTable1/_SUCCESS -rwxrwxrwx 0 sshuser hdfs 12 2016-02-26 21:09 adl://hdiadlsg1store.azuredatalakestore.net/Sqoop/SqoopImportTable1/part-m-00000 -rwxrwxrwx 0 sshuser hdfs 14 2016-02-26 21:09 adl://hdiadlsg1store.azuredatalakestore.net/Sqoop/SqoopImportTable1/part-m-00001 -rwxrwxrwx 0 sshuser hdfs 13 2016-02-26 21:09 adl://hdiadlsg1store.azuredatalakestore.net/Sqoop/SqoopImportTable1/part-m-00002 -rwxrwxrwx 0 sshuser hdfs 18 2016-02-26 21:09 adl://hdiadlsg1store.azuredatalakestore.net/Sqoop/SqoopImportTable1/part-m-00003
Jede part-m-* Datei entspricht einer Zeile in der Quelltabelle Table1. Sie können den Inhalt der part-m-* Dateien anzeigen und überprüfen.
Exportieren von Daten aus Data Lake Storage Gen1 in Azure SQL-Datenbank
Exportieren Sie die Daten aus dem Data Lake Storage Gen1-Konto in die leere Tabelle Table2 in Azure SQL-Datenbank. Verwenden Sie die folgende Syntax.
sqoop-export --connect "jdbc:sqlserver://<sql-database-server-name>.database.windows.net:1433;username=<username>@<sql-database-server-name>;password=<password>;database=<sql-database-name>" --table Table2 --export-dir adl://<data-lake-storage-gen1-name>.azuredatalakestore.net/Sqoop/SqoopImportTable1 --input-fields-terminated-by ","
Beispiel:
sqoop-export --connect "jdbc:sqlserver://mysqoopserver.database.windows.net:1433;username=user1@mysqoopserver;password=<password>;database=mysqoopdatabase" --table Table2 --export-dir adl://myadlsg1store.azuredatalakestore.net/Sqoop/SqoopImportTable1 --input-fields-terminated-by ","
Stellen Sie sicher, dass die Daten in die SQL-Datenbanktabelle hochgeladen wurden. Stellen Sie mit SQL Server Management Studio oder Visual Studio eine Verbindung mit Azure SQL-Datenbank her, und führen Sie dann die folgende Abfrage aus:
SELECT * FROM TABLE2
Dieser Befehl führt zu folgender Ausgabe:
ID FName LName ------------------- 1 Neal Kell 2 Lila Fulton 3 Erna Myers 4 Annette Simpson
Überlegungen zur Leistung bei der Verwendung von Sqoop
Informationen zur Leistungsoptimierung Ihres Sqoop-Auftrags zum Kopieren von Daten in Data Lake Storage Gen1 finden Sie im Blogbeitrag zur Sqoop-Leistung.