Kopieren von Daten zwischen Data Lake Storage Gen1 und Azure SQL-Datenbank mithilfe von Sqoop

Erfahren Sie, wie Sie Apache Sqoop zum Importieren und Exportieren von Daten zwischen Azure SQL-Datenbank und Azure Data Lake Storage Gen1 verwenden.

Was ist Sqoop?

Big Data-Anwendungen sind eine natürliche Wahl für die Verarbeitung unstrukturierter und halbstrukturierter Daten, z. B. Protokolle und Dateien. Möglicherweise müssen Sie jedoch auch strukturierte Daten verarbeiten, die in relationalen Datenbanken gespeichert sind.

Apache Sqoop ist ein Tool zum Übertragen von Daten zwischen relationalen Datenbanken und einem Big Data-Repository, z. B. Data Lake Storage Gen1. Sie können sie verwenden, um Daten aus einem relationalen Datenbankverwaltungssystem (RDBMS) wie Azure SQL-Datenbank in Data Lake Storage Gen1 zu importieren. Anschließend können Sie die Daten mithilfe von Big Data-Workloads transformieren und analysieren und dann die Daten wieder in ein RDBMS exportieren. In diesem Artikel verwenden Sie eine Datenbank in Azure SQL-Datenbank als relationale Datenbank, aus der Sie importieren/exportieren können.

Voraussetzungen

Bevor Sie beginnen, benötigen Sie Folgendes:

Erstellen von Beispieltabellen in der Datenbank

  1. Erstellen Sie zunächst zwei Beispieltabellen in der Datenbank. Verwenden Sie SQL Server Management Studio oder Visual Studio, um eine Verbindung mit der Datenbank herzustellen, und führen Sie dann die folgenden Abfragen aus.

    Tabelle1 erstellen

    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
    

    Tabelle2 erstellen

    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 Tabelle1 einige Beispieldaten hinzuzufügen. Lassen Sie Tabelle2 leer. Später importieren Sie Daten aus Tabelle1 in Data Lake Storage Gen1. Anschließend exportieren Sie Daten aus Data Lake Storage Gen1 in Tabelle2.

    INSERT INTO [dbo].[Table1] VALUES (1,'Neal','Kell'), (2,'Lila','Fulton'), (3, 'Erna','Myers'), (4,'Annette','Simpson');
    

Verwenden von Sqoop von einem HDInsight-Cluster mit Zugriff auf Data Lake Storage Gen1

Ein HDInsight-Cluster verfügt bereits über die Sqoop-Pakete. Wenn Sie den HDInsight-Cluster für die Verwendung von Data Lake Storage Gen1 als zusätzlichen Speicher konfiguriert haben, können Sie Sqoop (ohne Konfigurationsänderungen) verwenden, um Daten zwischen einer relationalen Datenbank wie Azure SQL-Datenbank und einem Data Lake Storage Gen1-Konto zu importieren/zu exportieren.

  1. In diesem Artikel wird davon ausgegangen, dass Sie einen Linux-Cluster erstellt haben, damit Sie SSH zum Herstellen einer Verbindung mit dem Cluster verwenden sollten. Siehe Verbindung zu einem Linux-basierten HDInsight-Cluster herstellen.

  2. Überprüfen Sie, ob Sie über den Cluster auf das Data Lake Storage Gen1-Konto zugreifen können. Führen Sie den folgenden Befehl über die SSH-Eingabeaufforderung aus:

    hdfs dfs -ls adl://<data_lake_storage_gen1_account>.azuredatalakestore.net/
    

    Dieser Befehl enthält eine Liste von Dateien/Ordnern im Data Lake Storage Gen1-Konto.

Importieren von Daten aus der 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 dieser Speicherort /usr/hdp/<version>/sqoop/bin.

  2. Importieren Sie die Daten aus Tabelle1 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 " stellt den Namen des Servers dar, auf dem die Datenbank ausgeführt wird. Der Platzhalter "sql-database-name" stellt den tatsächlichen Datenbanknamen dar.

    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 an das Data Lake Storage Gen1-Konto übertragen wurden. Führen Sie den folgenden Befehl aus:

    hdfs dfs -ls adl://hdiadlsg1store.azuredatalakestore.net/Sqoop/SqoopImportTable1/
    

    Sie sollten die folgende Ausgabe sehen.

    -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, um dies zu ü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 der 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. Überprüfen Sie, ob die Daten in die SQL-Datenbanktabelle hochgeladen wurden. Verwenden Sie SQL Server Management Studio oder Visual Studio, um eine Verbindung mit der Azure SQL-Datenbank herzustellen, und führen Sie dann die folgende Abfrage aus.

    SELECT * FROM TABLE2
    

    Dieser Befehl sollte die folgende Ausgabe haben.

     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 "Sqoop Performance".

Nächste Schritte