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:
- Subskrypcja platformy Azure. Zobacz temat Uzyskiwanie bezpłatnej wersji próbnej platformy Azure.
- Konto usługi Azure Data Lake Storage Gen1. Aby uzyskać instrukcje dotyczące tworzenia konta, zobacz Wprowadzenie do usługi Azure Data Lake Storage Gen1
- Klaster usługi Azure HDInsight z dostępem do konta Data Lake Storage Gen1. Zobacz Tworzenie klastra usługi HDInsight przy użyciu Data Lake Storage Gen1. W tym artykule założono, że masz klaster usługi HDInsight z systemem Linux z dostępem Data Lake Storage Gen1.
- Usługa Azure SQL Database. Aby uzyskać instrukcje dotyczące tworzenia bazy danych w usłudze Azure SQL Database, zobacz Tworzenie bazy danych w usłudze Azure SQL Database
Tworzenie przykładowych tabel w bazie danych
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
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.
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.
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
Przejdź do katalogu, w którym są dostępne pakiety Sqoop. Zazwyczaj ta lokalizacja to
/usr/hdp/<version>/sqoop/bin
.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
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
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 ","
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.