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:

Skapa exempeltabeller i databasen

  1. 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
    
  2. 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.

  1. 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.

  2. 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

  1. Gå till katalogen där Sqoop-paket är tillgängliga. Den här platsen är /usr/hdp/<version>/sqoop/binvanligtvis .

  2. 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
    
  3. 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

  1. 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 ","
    
  2. 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.

Nästa steg