Kopírování dat mezi Data Lake Storage Gen1 a Azure SQL Database pomocí Sqoopu

Naučte se používat Apache Sqoop k importu a exportu dat mezi Azure SQL Database a Azure Data Lake Storage Gen1.

Co je Sqoop?

Aplikace pro velké objemy dat jsou přirozenou volbou pro zpracování nestrukturovaných a částečně strukturovaných dat, jako jsou protokoly a soubory. Můžete ale také potřebovat zpracovávat strukturovaná data, která jsou uložená v relačních databázích.

Apache Sqoop je nástroj určený k přenosu dat mezi relačními databázemi a úložištěm velkých objemů dat, jako je Data Lake Storage Gen1. Můžete ho použít k importu dat ze systému pro správu relačních databází (RDBMS), jako je Azure SQL Database, do Data Lake Storage Gen1. Pak můžete transformovat a analyzovat data pomocí úloh s velkými objemy dat a pak je exportovat zpět do systému REBMS. V tomto článku použijete databázi v Azure SQL Database jako relační databázi, ze které chcete importovat nebo exportovat.

Požadavky

Než začnete, musíte mít následující:

Vytvoření ukázkových tabulek v databázi

  1. Začněte vytvořením dvou ukázkových tabulek v databázi. Pomocí SQL Server Management Studio nebo sady Visual Studio se připojte k databázi a spusťte následující dotazy.

    Vytvoření tabulky 1

    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
    

    Vytvoření tabulky 2

    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. Spuštěním následujícího příkazu přidejte ukázková data do tabulky Table1. Ponechte tabulku Table2 prázdnou. Později naimportujete data z tabulky Table1 do Data Lake Storage Gen1. Potom exportujete data z Data Lake Storage Gen1 do tabulky Table2.

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

Použití Sqoopu z clusteru HDInsight s přístupem k Data Lake Storage Gen1

Cluster HDInsight už má balíčky Sqoop k dispozici. Pokud jste cluster HDInsight nakonfigurovali tak, aby jako další úložiště používal Data Lake Storage Gen1, můžete použít Sqoop (bez jakýchkoli změn konfigurace) k importu/exportu dat mezi relační databází, jako je Azure SQL Database, a účtem Data Lake Storage Gen1.

  1. V tomto článku předpokládáme, že jste vytvořili cluster s Linuxem, takže byste pro připojení ke clusteru měli použít SSH. Viz Připojení ke clusteru HDInsight se systémem Linux.

  2. Ověřte, jestli máte přístup k účtu Data Lake Storage Gen1 z clusteru. Na příkazovém řádku SSH spusťte následující příkaz:

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

    Tento příkaz zobrazí seznam souborů a složek v účtu Data Lake Storage Gen1.

Import dat z Azure SQL Database do Data Lake Storage Gen1

  1. Přejděte do adresáře, kde jsou k dispozici balíčky Sqoop. Toto umístění je /usr/hdp/<version>/sqoop/binobvykle .

  2. Importujte data z tabulky Table1 do účtu Data Lake Storage Gen1. Použijte následující syntaxi:

    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
    

    Zástupný symbol sql-database-server-name představuje název serveru, na kterém je databáze spuštěna. Zástupný symbol sql-database-name představuje skutečný název databáze.

    Třeba

    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. Ověřte, že se data přenesla do účtu Data Lake Storage Gen1. Spusťte následující příkaz:

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

    Měli byste vidět následující výstup.

    -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
    

    Každý soubor part-m-* odpovídá řádku ve zdrojové tabulce Table1. Můžete zobrazit obsah souborů part-m-* k ověření.

Export dat z Data Lake Storage Gen1 do Azure SQL Database

  1. Exportujte data z účtu Data Lake Storage Gen1 do prázdné tabulky Table2 v databázi Azure SQL. Použijte následující syntaxi.

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

    Třeba

    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. Ověřte, že se data nahrála do tabulky SQL Database. Pomocí SQL Server Management Studio nebo sady Visual Studio se připojte k databázi Azure SQL a spusťte následující dotaz.

    SELECT * FROM TABLE2
    

    Tento příkaz by měl mít následující výstup.

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

Důležité informace o výkonu při používání Sqoopu

Informace o ladění výkonu úlohy Sqoop za účelem kopírování dat do Data Lake Storage Gen1 najdete v blogovém příspěvku o výkonu Sqoop.

Další kroky