Udostępnij za pośrednictwem


Kopiowanie danych między bazą danych Data Lake Storage Gen1 i Azure SQL przy użyciu narzędzia Sqoop

Dowiedz się, jak używać narzędzia Apache Sqoop do importowania i eksportowania danych między usługą Azure SQL Database i Azure Data Lake Storage Gen1.

Co to jest Sqoop?

Aplikacje danych big data są naturalnym wyborem do przetwarzania danych bez struktury i częściowo ustrukturyzowanych, takich jak dzienniki i pliki. Może być jednak konieczne przetwarzanie danych strukturalnych przechowywanych w relacyjnych bazach danych.

Apache Sqoop to narzędzie przeznaczone do przesyłania danych między relacyjnymi bazami danych i repozytorium danych big data, takim jak Data Lake Storage Gen1. Służy do importowania danych z systemu zarządzania relacyjnymi bazami danych (RDBMS), takiego jak Azure SQL Database do Data Lake Storage Gen1. Następnie można przekształcać i analizować dane przy użyciu obciążeń danych big data, a następnie eksportować je z powrotem do systemu zarządzania relacyjnymi bazami danych. W tym artykule do importowania/eksportowania używasz bazy danych w usłudze Azure SQL Database jako relacyjnej bazy danych.

Wymagania wstępne

Przed rozpoczęciem musisz mieć następujące elementy:

Tworzenie przykładowych tabel w bazie danych

  1. Aby rozpocząć, utwórz dwie przykładowe tabele w bazie danych. Użyj SQL Server Management Studio lub Visual Studio, aby nawiązać połączenie z bazą danych, a następnie uruchom następujące zapytania.

    Tworzenie tabeli Table1

    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
    

    Tworzenie tabeli Table2

    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. Uruchom następujące polecenie, aby dodać przykładowe dane do tabeli Table1. Pozostaw tabelę Table2 pustą. Później zaimportujesz dane z tabeli Table1 do Data Lake Storage Gen1. Następnie wyeksportujesz dane z Data Lake Storage Gen1 do tabeli Table2.

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

Używanie narzędzia Sqoop z klastra usługi HDInsight z dostępem do Data Lake Storage Gen1

Klaster usługi HDInsight ma już dostępne pakiety Sqoop. Jeśli skonfigurowano klaster usługi HDInsight do używania Data Lake Storage Gen1 jako dodatkowego magazynu, możesz użyć narzędzia Sqoop (bez żadnych zmian konfiguracji) do importowania/eksportowania danych między relacyjną bazą danych, taką jak baza danych Azure SQL i konto Data Lake Storage Gen1.

  1. W tym artykule założono, że utworzono klaster systemu Linux, więc należy użyć protokołu SSH do nawiązania połączenia z klastrem. Zobacz Nawiązywanie połączenia z klastrem usługi HDInsight opartym na systemie Linux.

  2. Sprawdź, czy możesz uzyskać dostęp do konta Data Lake Storage Gen1 z klastra. Uruchom następujące polecenie w wierszu polecenia SSH:

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

    To polecenie udostępnia listę plików/folderów na koncie Data Lake Storage Gen1.

Importowanie danych z usługi Azure SQL Database do usługi Data Lake Storage Gen1

  1. Przejdź do katalogu, w którym są dostępne pakiety Sqoop. Zazwyczaj ta lokalizacja to /usr/hdp/<version>/sqoop/bin.

  2. Zaimportuj dane z tabeli Table1 do konta Data Lake Storage Gen1. Użyj następującej składni:

    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
    

    Symbol zastępczy sql-database-server-name reprezentuje nazwę serwera, na którym działa baza danych. Symbol zastępczy sql-database-name reprezentuje rzeczywistą nazwę bazy danych.

    Na przykład

    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. Sprawdź, czy dane zostały przeniesione na konto Data Lake Storage Gen1. Uruchom następujące polecenie:

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

    Powinny zostać wyświetlone następujące dane wyjściowe.

    -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żdy plik part-m-* odpowiada wierszowi w tabeli źródłowej Table1. Możesz wyświetlić zawartość plików part-m-* do zweryfikowania.

Eksportowanie danych z Data Lake Storage Gen1 do usługi Azure SQL Database

  1. Wyeksportuj dane z konta Data Lake Storage Gen1 do pustej tabeli Table2 w bazie danych Azure SQL. Użyj następującej składni.

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

    Na przykład

    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. Sprawdź, czy dane zostały przekazane do tabeli SQL Database. Użyj SQL Server Management Studio lub Visual Studio, aby nawiązać połączenie z bazą danych Azure SQL, a następnie uruchom następujące zapytanie.

    SELECT * FROM TABLE2
    

    To polecenie powinno zawierać następujące dane wyjściowe.

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

Zagadnienia dotyczące wydajności podczas korzystania z narzędzia Sqoop

Aby uzyskać informacje o dostrajaniu wydajności zadania Sqoop w celu kopiowania danych do Data Lake Storage Gen1, zobacz wpis w blogu dotyczącym wydajności sqoop.

Następne kroki