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:

Erstellen von Beispieltabellen in der Datenbank

  1. 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
    
  2. 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.

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

  2. Ü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

  1. Navigieren Sie zu dem Verzeichnis, in dem Sqoop-Pakete verfügbar sind. In der Regel ist dies der Speicherort /usr/hdp/<version>/sqoop/bin.

  2. 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
    
  3. 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

  1. 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 ","
    
  2. 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.

Nächste Schritte