Delen via


Gegevens kopiëren tussen Data Lake Storage Gen1 en Azure SQL Database met behulp van Sqoop

Meer informatie over het gebruik van Apache Sqoop voor het importeren en exporteren van gegevens tussen Azure SQL Database en Azure Data Lake Storage Gen1.

Wat is Sqoop?

Big data-toepassingen zijn een natuurlijke keuze voor het verwerken van ongestructureerde en semi-gestructureerde gegevens, zoals logboeken en bestanden. Het kan echter ook nodig zijn om gestructureerde gegevens te verwerken die zijn opgeslagen in relationele databases.

Apache Sqoop is een hulpprogramma dat is ontworpen om gegevens over te dragen tussen relationele databases en een opslagplaats voor big data, zoals Data Lake Storage Gen1. U kunt het gebruiken om gegevens uit een relationeel databasebeheersysteem (RDBMS) zoals Azure SQL Database te importeren in Data Lake Storage Gen1. Vervolgens kunt u de gegevens transformeren en analyseren met behulp van big data-workloads en de gegevens vervolgens weer exporteren naar een RDBMS. In dit artikel gebruikt u een database in Azure SQL Database als uw relationele database waaruit u wilt importeren/exporteren.

Vereisten

Voordat u begint, moet u het volgende hebben:

Voorbeeldtabellen maken in de database

  1. Maak eerst twee voorbeeldtabellen in de database. Gebruik SQL Server Management Studio of Visual Studio om verbinding te maken met de database en voer vervolgens de volgende query's uit.

    Tabel1 maken

    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
    

    Tabel2 maken

    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. Voer de volgende opdracht uit om enkele voorbeeldgegevens toe te voegen aan Table1. Laat Table2 leeg. Later importeert u gegevens uit Table1 in Data Lake Storage Gen1. Vervolgens exporteert u gegevens uit Data Lake Storage Gen1 naar Table2.

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

Sqoop gebruiken vanuit een HDInsight-cluster met toegang tot Data Lake Storage Gen1

In een HDInsight-cluster zijn de Sqoop-pakketten al beschikbaar. Als u het HDInsight-cluster hebt geconfigureerd voor het gebruik van Data Lake Storage Gen1 als extra opslag, kunt u Sqoop (zonder configuratiewijzigingen) gebruiken om gegevens te importeren/exporteren tussen een relationele database zoals Azure SQL Database en een Data Lake Storage Gen1-account.

  1. Voor dit artikel gaan we ervan uit dat u een Linux-cluster hebt gemaakt, dus moet u SSH gebruiken om verbinding te maken met het cluster. Zie Verbinding maken met een HDInsight-cluster op basis van Linux.

  2. Controleer of u toegang hebt tot het Data Lake Storage Gen1-account vanuit het cluster. Voer de volgende opdracht uit vanaf de SSH-prompt:

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

    Met deze opdracht wordt een lijst met bestanden/mappen in het Data Lake Storage Gen1-account weergegeven.

Gegevens uit Azure SQL database importeren in Data Lake Storage Gen1

  1. Navigeer naar de map waar Sqoop-pakketten beschikbaar zijn. Deze locatie is /usr/hdp/<version>/sqoop/bindoorgaans .

  2. Importeer de gegevens uit Table1 in het Data Lake Storage Gen1-account. Gebruik de volgende syntaxis:

    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
    

    De tijdelijke aanduiding sql-database-server-name vertegenwoordigt de naam van de server waarop de database wordt uitgevoerd. Tijdelijke aanduiding sql-database-name vertegenwoordigt de werkelijke databasenaam.

    Bijvoorbeeld:

    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. Controleer of de gegevens zijn overgedragen naar het Data Lake Storage Gen1-account. Voer de volgende opdracht uit:

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

    De volgende uitvoer wordt weergegeven.

    -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
    

    Elk deel-m-*-bestand komt overeen met een rij in de brontabel , Tabel1. U kunt de inhoud van de deel-m-*-bestanden bekijken om te controleren.

Gegevens uit Data Lake Storage Gen1 exporteren naar Azure SQL Database

  1. Exporteer de gegevens uit het Data Lake Storage Gen1-account naar de lege tabel, Tabel2, in de Azure SQL-database. Gebruik de volgende syntaxis.

    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 ","
    

    Bijvoorbeeld:

    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. Controleer of de gegevens zijn geüpload naar de SQL Database tabel. Gebruik SQL Server Management Studio of Visual Studio om verbinding te maken met de Azure SQL Database en voer vervolgens de volgende query uit.

    SELECT * FROM TABLE2
    

    Deze opdracht moet de volgende uitvoer hebben.

     ID  FName    LName
    -------------------
    1    Neal     Kell
    2    Lila     Fulton
    3    Erna     Myers
    4    Annette  Simpson
    

Prestatieoverwegingen bij het gebruik van Sqoop

Zie het blogbericht sqoop-prestaties voor informatie over het afstemmen van de prestaties van uw Sqoop-taak om gegevens naar Data Lake Storage Gen1 te kopiëren.

Volgende stappen