Копирование данных между Data Lake Storage 1-го поколения и базой данных SQL Azure с помощью Sqoop
Узнайте, как с помощью Apache Sqoop импортировать и экспортировать данные между Базой данных SQL Azure и Azure Data Lake Storage 1-го поколения.
Что такое Sqoop?
Приложения для работы с большими объемами данных являются естественным выбором для обработки неструктурированных и частично структурированных данных, таких как журналы и файлы. Но у вас может возникнуть необходимость обработки структурированных данных, хранимых в реляционных базах данных.
Apache Sqoop — это средство, предназначенное для передачи данных между реляционными базами данных и репозиторием больших данных, например Data Lake Storage 1-го поколения. Его можно использовать для импорта данных из системы управления реляционными базами данных (RDBMS), такой как База данных SQL Azure, в Azure Data Lake Storage 1-го поколения. Затем данные можно преобразовать и проанализировать с помощью рабочих нагрузок больших данных, а после этого экспортировать обратно в RDBMS. В этой статье в качестве реляционной базы данных для импорта и экспорта используется база данных службы "База данных SQL Azure".
Предварительные требования
Перед началом работы убедитесь, что у вас есть такие компоненты.
- Подписка Azure. См. страницу бесплатной пробной версии Azure.
- Учетная запись Azure Data Lake Storage 1-го поколения. Инструкции по созданию учетной записи см. в статье Начало работы с Azure Data Lake Storage Gen1.
- Кластер Azure HDInsight с доступом к учетной записи Data Lake Storage 1-го поколения. Дополнительные сведения см. в статье Создание кластеров HDInsight, использующих Data Lake Store, с помощью портала Azure. В этой статье предполагается, что у вас есть кластер HDInsight на платформе Linux с доступом к Data Lake Storage 1-го поколения.
- База данных SQL Azure. Инструкции по созданию базы данных в службе "База данных SQL Azure" см. в статье Создание базы данных в Базе данных SQL Azure.
Создание примеров таблиц в базе данных
Сначала создайте в базе данных две тестовые таблицы. С помощью SQL Server Management Studio или Visual Studio подключитесь к базе данных и выполните приведенные ниже запросы.
Создание 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
Создание 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
Выполните приведенную ниже команду, чтобы добавить тестовые данные в таблицу Table1. Оставьте таблицу Table2 пустой. Позднее вы импортируете данные из таблицы Table1 в Data Lake Storage 1-го поколения. Затем вы экспортируете данные из Data Lake Storage 1-го поколения в таблицу Table2.
INSERT INTO [dbo].[Table1] VALUES (1,'Neal','Kell'), (2,'Lila','Fulton'), (3, 'Erna','Myers'), (4,'Annette','Simpson');
Использование Sqoop из кластера Azure HDInsight с доступом в Data Lake Storage 1-го поколения
В кластере HDInsight уже имеются доступные пакеты Sqoop. Если для кластера HDInsight настроено использование Data Lake Storage 1-го поколения в качестве дополнительного хранилища, можно применить Sqoop (без изменения конфигурации) для импорта и экспорта данных между реляционной базой данных (например, Базой данных SQL Azure) и учетной записью Data Lake Storage 1-го поколения.
В этой статье предполагается, что вы создали кластер Linux, поэтому для подключения к нему следует использовать SSH. См. раздел Подключение к кластеру HDInsight на основе Linux.
Проверьте, доступна ли учетная запись хранилища Data Lake Storage 1-го поколения из кластера. Выполните следующую команду из командной строки SSH:
hdfs dfs -ls adl://<data_lake_storage_gen1_account>.azuredatalakestore.net/
Эта команда возвратит список файлов и папок в учетной записи хранилища Data Lake Storage 1-го поколения.
Импорт данных из Базы данных SQL Azure в Data Lake Storage 1-го поколения
Перейдите в каталог, где доступны пакеты Sqoop. Как правило, это расположение
/usr/hdp/<version>/sqoop/bin
.Импортируйте данные из таблицы Table1 в учетную запись Data Lake Storage 1-го поколения. Используйте следующий синтаксис:
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
Заполнитель sql-database-server-name представляет имя сервера, на котором работает база данных. sql-database-name представляет реальное имя базы данных.
Например,
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
Убедитесь, что данные были переданы в учетную запись Data Lake Storage 1-го поколения. Выполните следующую команду:
hdfs dfs -ls adl://hdiadlsg1store.azuredatalakestore.net/Sqoop/SqoopImportTable1/
Вы должны увидеть следующие выходные данные.
-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
Каждый файл part-m-* соответствует строке в исходной таблице Table1. Чтобы проверить это, просмотрите содержимое файлов part-m-*.
Экспорт данных из Data Lake Storage 1-го поколения в Базу данных SQL Azure
Экспортируйте данные из учетной записи Data Lake Storage 1-го поколения в пустую таблицу Table2 в базе данных SQL Azure. Используйте приведенный ниже синтаксис.
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 ","
Например,
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 ","
Убедитесь, что данные были отправлены в таблицу базы данных SQL. С помощью SQL Server Management Studio или Visual Studio подключитесь к базе данных SQL Azure, а затем выполните следующий запрос.
SELECT * FROM TABLE2
Должны отобразиться указанные ниже выходные данные команды.
ID FName LName ------------------- 1 Neal Kell 2 Lila Fulton 3 Erna Myers 4 Annette Simpson
Рекомендации по производительности при использовании Sqoop
Сведения о настройке производительности задания Sqoop, копирующего данные в Data Lake Storage 1-го поколения, собраны в записи блога о производительности Sqoop.