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í:
- Předplatné Azure. Viz Získání bezplatné zkušební verze Azure.
- Účet Azure Data Lake Storage Gen1. Pokyny k vytvoření účtu najdete v tématu Začínáme s Azure Data Lake Storage Gen1.
- Cluster Azure HDInsight s přístupem k účtu Data Lake Storage Gen1. Viz Vytvoření clusteru HDInsight s Data Lake Storage Gen1. Tento článek předpokládá, že máte cluster HDInsight Linux s Data Lake Storage Gen1 přístupem.
- Azure SQL Database. Pokyny k vytvoření databáze ve službě Azure SQL Database najdete v tématu Vytvoření databáze ve službě Azure SQL Database.
Vytvoření ukázkových tabulek v databázi
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
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.
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.
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
Přejděte do adresáře, kde jsou k dispozici balíčky Sqoop. Toto umístění je
/usr/hdp/<version>/sqoop/bin
obvykle .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
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
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 ","
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.