Kopiera data mellan Data Lake Storage Gen1 och Azure SQL Database med Sqoop
Lär dig hur du använder Apache Sqoop för att importera och exportera data mellan Azure SQL Database och Azure Data Lake Storage Gen1.
Vad är Sqoop?
Stordataprogram är ett naturligt val för bearbetning av ostrukturerade och halvstrukturerade data, till exempel loggar och filer. Men du kan också behöva bearbeta strukturerade data som lagras i relationsdatabaser.
Apache Sqoop är ett verktyg som är utformat för att överföra data mellan relationsdatabaser och en lagringsplats för stordata, till exempel Data Lake Storage Gen1. Du kan använda den för att importera data från ett hanteringssystem för relationsdatabaser (RDBMS), till exempel Azure SQL Database till Data Lake Storage Gen1. Du kan sedan transformera och analysera data med hjälp av stordataarbetsbelastningar och sedan exportera tillbaka data till en RDBMS. I den här artikeln använder du en databas i Azure SQL Database som relationsdatabas att importera/exportera från.
Förutsättningar
Innan du börjar måste du ha följande:
- En Azure-prenumeration. Se Hämta en kostnadsfri utvärderingsversion av Azure.
- Ett Azure Data Lake Storage Gen1-konto. Anvisningar om hur du skapar kontot finns i Komma igång med Azure Data Lake Storage Gen1
- Azure HDInsight-kluster med åtkomst till ett Data Lake Storage Gen1-konto. Se Skapa ett HDInsight-kluster med Data Lake Storage Gen1. Den här artikeln förutsätter att du har ett HDInsight Linux-kluster med Data Lake Storage Gen1 åtkomst.
- Azure SQL Database. Anvisningar om hur du skapar en databas i Azure SQL Database finns i Skapa en databas i Azure SQL Database
Skapa exempeltabeller i databasen
Börja med att skapa två exempeltabeller i databasen. Använd SQL Server Management Studio eller Visual Studio för att ansluta till databasen och kör sedan följande frågor.
Skapa tabell1
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
Skapa tabell2
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
Kör följande kommando för att lägga till exempeldata i Table1. Lämna Table2 tomt. Senare importerar du data från Table1 till Data Lake Storage Gen1. Sedan exporterar du data från Data Lake Storage Gen1 till Table2.
INSERT INTO [dbo].[Table1] VALUES (1,'Neal','Kell'), (2,'Lila','Fulton'), (3, 'Erna','Myers'), (4,'Annette','Simpson');
Använda Sqoop från ett HDInsight-kluster med åtkomst till Data Lake Storage Gen1
Ett HDInsight-kluster har redan Sqoop-paketen tillgängliga. Om du har konfigurerat HDInsight-klustret att använda Data Lake Storage Gen1 som ytterligare lagring kan du använda Sqoop (utan några konfigurationsändringar) för att importera/exportera data mellan en relationsdatabas, till exempel Azure SQL Database och ett Data Lake Storage Gen1 konto.
I den här artikeln förutsätter vi att du har skapat ett Linux-kluster så att du bör använda SSH för att ansluta till klustret. Se Ansluta till ett Linux-baserat HDInsight-kluster.
Kontrollera om du kan komma åt Data Lake Storage Gen1-kontot från klustret. Kör följande kommando från SSH-prompten:
hdfs dfs -ls adl://<data_lake_storage_gen1_account>.azuredatalakestore.net/
Det här kommandot innehåller en lista över filer/mappar i Data Lake Storage Gen1-kontot.
Importera data från Azure SQL Database till Data Lake Storage Gen1
Gå till katalogen där Sqoop-paket är tillgängliga. Den här platsen är
/usr/hdp/<version>/sqoop/bin
vanligtvis .Importera data från Table1 till Data Lake Storage Gen1-kontot. Använd följande 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
Platshållaren sql-database-server-name representerar namnet på den server där databasen körs. platshållaren sql-database-name representerar det faktiska databasnamnet.
Exempel:
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
Kontrollera att data har överförts till Data Lake Storage Gen1-kontot. Kör följande kommando:
hdfs dfs -ls adl://hdiadlsg1store.azuredatalakestore.net/Sqoop/SqoopImportTable1/
Du bör se följande utdata.
-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
Varje del-m-*-fil motsvarar en rad i källtabellen , Table1. Du kan visa innehållet i del-m-*-filerna för att verifiera.
Exportera data från Data Lake Storage Gen1 till Azure SQL Database
Exportera data från Data Lake Storage Gen1-kontot till den tomma tabellen Table2 i Azure SQL Database. Använd följande 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 ","
Exempel:
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 ","
Kontrollera att data har laddats upp till SQL Database-tabellen. Använd SQL Server Management Studio eller Visual Studio för att ansluta till Azure SQL Database och kör sedan följande fråga.
SELECT * FROM TABLE2
Det här kommandot bör ha följande utdata.
ID FName LName ------------------- 1 Neal Kell 2 Lila Fulton 3 Erna Myers 4 Annette Simpson
Prestandaöverväganden vid användning av Sqoop
Information om prestandajustering av ditt Sqoop-jobb för att kopiera data till Data Lake Storage Gen1 finns i blogginlägget om Sqoop-prestanda.